時々唸るファンの音

色々と勉強してみたいと思ってる人の備忘録。

初心者がdiscordのbotを作ったお話。

おひさしぶりです

まずはさわやかに挨拶。

めっちゃ久しぶりです。生きてます。少し現実逃避してたけど、一応生きてます……。

お休みしてる間にいろいろやるべきことのスマート化をしました。

 

本題

ということで、本題いきますね。

今日は、discordのbotをつくってみた!というお話をしたいと思います。

まずは、こちらを見て頂こう。

 

あの後ちょっと機能足したけど、基本的にはコレ。 

なんでソレを作ろうとしたのか。

巷でちょこっと話題になってるN予備校のプログラミング入門でslackのbotを作ろうという内容があるのですが、それに取り組んでみたあと

ふぁん「あれ、これアレでは……よく使うdiscordのbot作れば楽しいんじゃね…?」

 

思い立ったが吉日…

さっそく取り組むことに。

 準備編

→基本的にはN予備校のプログラミング入門で基本的な環境構築ができてたのでそれに準拠します。

(色々記事を見てたら、ブラウザ上でdiscordbotを作れるサービスもあって試しに利用してみたんだけど、5分に1回アクセスさせるのがめんどくさかったし、やりたいことのテンプレートを利用したときのbotの動きがちょっと怪しかったので使用しないことにしました。)

 

N予備校プログラミング入門の記事のままだと、nodeのバージョンが低くて何もできないので、とりあえず最新版をツッコみます。

 

discord.jsを使ってもよかったのですが、

今回はErisを採用。(やりたいことの記事が全部コレ使用のモノだったので)

 

これらをすべて準備して、いよいよコードを書いていきます。

コードを書く

今回やらせたかったことは以下の事です

botにリプライでヘルプを出す

●「おみくじ」と記述でおみくじ機能

●ボイスチャンネルの入退室のお知らせを指定のチャンネルに流す。

--後で実装したのはおみくじ機能とほぼ一緒ですが、

FF14のコンテンツ、トレジャーハントの扉チョイス支援

(おみくじ機能の中身変えただけ)

 

記述の仕方は違うとは思うんだけど、

どういうことができるのか どんなイメージで実装するのかを参考にしたのがこちら。

 

scrapbox.io

 

やりたいことの逆引きで、ああこんなことができるんだなーを想像。

あとは一つずつ実装していく感じです。

 

 

const Eris = require("eris");

// botのトークンID
var bot = new Eris(
  ”botのトークンIDを調べて入れる。”
);
const textChannelId = "発言したいテキストチャンネルのIDを調べて入れる。";


bot.on("ready", () => {
  // botの準備できたら呼び出されるイベント
  console.log("Ready!");
});

// チャンネルに発言があったときのアクション

bot.on("messageCreate", (message) => {
  // botのメッセージは無視
  if (message.author.bot) return;

  // botにメンションでヘルプ
  message.mentions.forEach((user) => {
    if (user.bot) {
      bot.createMessage(
        textChannelId,
        "このbotのできる事 \n ●VCチャンネルの入退室のお知らせ \n ●「おみくじ」… おみくじがひけます \n ●「!扉」…地図の扉チョイス支援します \n ●「!深層」…地図の扉チョイス支援をします。(深層用) \n となっております。" 
      );
      return;
    }
  });
  
// おみくじ機能
  if (message.content === "おみくじ") {
    const lots = ["大吉", "中吉", "小吉", "末吉", "凶"];
    const lot = lots[Math.floor(Math.random() * lots.length)];
    bot.createMessage(textChannelId, `君の運勢は${lot} です!`);
  }
// 地図
  if (message.content === "!扉") {
    const doors = ['左','右'];
    const destinyDoor = doors[Math.floor(Math.random() * doors.length)];
    bot.createMessage(textChannelId, `君の行くべき道は${destinyDoor} だ!!`);
  }
  if (message.content === "!深層") {
    const doors = ['左','右','中央'];
    const destinyDoor = doors[Math.floor(Math.random() * doors.length)];
    bot.createMessage(textChannelId, `君の行くべき道は${destinyDoor} だ!!`);
  }

// 吉田
if (message.content === "!吉田") {
  bot.createMessage(textChannelId, `ミラクルフラッシュが決まったァァァ!`);
}
});

//入退室処理
bot.on("voiceChannelJoin", (member, newChannel) => {

  let ch = newChannel.guild.defaultChannel;
  bot.createMessage(
    textChannelId,
    member.username + "がVCチャンネル[" + newChannel.name + "] に滑り込んだ!"
  );
});

bot.on("voiceChannelLeave", (member, oldChannel) => {
  let ch = oldChannel.guild.defaultChannel;
  bot.createMessage(
    textChannelId,
    member.username + "がVCチャンネル[" + oldChannel.name + "] から逃げ出した!"
  );
});

// Discord に接続します。
bot.connect();

これで最初にやりたいと思ったことは全部実装できてる(はず)です。
botトークンIDは絶対に他人に漏らしてはいけないということを心にとめましょう。
ダメ、絶対。

botのIDの取得の仕方は先人が色々書いてくれてるので、詳しくは割愛するけど
Discord Developer Portalここからbot作ったりなどの管理ができるので、このあたりをよく見てみるといいと思う。

作ってみた感想

まずはN予備校のコンテンツがすごくてだいたい環境構築出来てたのがありがたかった。
これ、独力で全部やろうとするとすごく大変そう。
最初詰まったのは、Erisがうまくインストールできなかったことなんだけど、
よくエラーメッセージ読んだら「バージョン低くて無理です…」って感じだったから、バージョン上げてみたらスイスイいったので
きちんとエラーメッセージは読もうという感じです。

あとはbotの発言を無視しないと永久にチャットが流れてしまって、こういうことにきをつけないとダメなんだな~と。

色々勉強になりました。

楽しかったです。。