4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

プログラミング研究会Tech.UniAdvent Calendar 2022

Day 14

SlackからDiscordに移行してBotを作ってみた!

Last updated at Posted at 2022-12-14

はじめに

こんにちは、ゆうです。

エンジニア御用達のコミュニケーションツールである「Slack」。

皆さん御存知の通り、今年の9月からSlackの有料プランが値上げされ、それに伴って無料プランにも90日間しか履歴が保存されないという制限が追加されました。

大きな企業で使用している方はあまりデメリットを感じることはないかもしれませんが、Tech.Uniのような活動の主体がオンラインで、かつ収益のない学生団体にとっては、今回の制限追加は中々致命的なものとなりました。

そこで、今までSlackとDiscordを併用していたこともあり、11月に全面的にDiscordに移行しました。移行と同時にJavaScript + Discord.jsでBotを開発して、様々な機能の自動化も実施してみました。

今回は、Discord Botを作成する手順と、Discordに移行した感想について簡単に書いていきたいと思います!

Discord Botを作成する手順

DiscordにBotを登録する

  1. 開発者用ページに行き、「New Application」をクリックします。
    001
  2. Botの名前を入力し、規約に同意して、「Create」をクリックします。
    002
  3. 次に、サイドバーのBotボタンからBotを追加します。
    005.png
  4. Botが追加されたら「Reset Token」をクリックして、トークンを生成します。
    006.png
  5. トークンが生成されたら「Copy」ボタンでコピーし、適当な場所に控えておきます。(後ほど使用します)
    008
  6. これでBotの登録は完了です!
    次にBotを自分のサーバーに招待してみましょう!
    サイドバーの「OAuth2 → URL Generator」をクリックして、SCOPESの「Bot」にチェックを入れます。
    003
  7. 次にその下に出てくる許可したい権限を選択して、一番下に生成された招待URLをコピーします。
    004
  8. コピーした招待URLをブラウザのアドレスバーにペーストして、追加するサーバーを選んで追加します。
    007.png
  9. これでBotの登録と招待が完了しました!

BotをJavaScriptで書いてみる

次に、いよいよJavaScriptでBot本体のコードを書いていきたいと思います。

注意
2022年7月頃、discord.jsのバージョン14.0.0(v14)がリリースされました。
v13以前のものと記述方法が大幅に異なりますので、注意してください。
この記事では14.6.0を使用しています。

開発環境
この記事では以下の開発環境で開発しています。

  • Visual Studio Code
  • macOS Ventura 13.1
  • npm 8.19.2
  • Node.js 16.18.0
  • discord.js 14.6.0

セットアップ

まず適当なディレクトリを作成して、その中でnpm initコマンドを実行します。(入力値は一例です)

mkdir bot_tutorial
npm init

    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sensible defaults.
    
    See `npm help init` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install <pkg>` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    package name: (dev) bot_tutorial
    version: (1.0.0)
    description:
    entry point: (index.js) bot.js
    test command:
    git repository:
    keywords:
    author:
    license: (ISC)
    About to write to /Users/yu/dev/package.json:
    
    {
      "name": "bot_tutorial",
      "version": "1.0.0",
      "description": "",
      "main": "bot.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    
    
    Is this OK? (yes) yes

次に、下のコマンドでdiscord.jsをプロジェクトにインストールします。

npm install discord.js

コーディング

そして、上記のentry pointで指定したファイル(今回はbot.js)を、作成したディレクトリ内に作成します。

今回は、「こんにちは」と打ったら「こんにちは!」とリプライしてくれるだけの簡単なものを作成してみます。

bot.js
const { Client, GatewayIntentBits, Events } = require('discord.js');
const client = new Client({ intents: [ 
  GatewayIntentBits.Guilds,
  GatewayIntentBits.GuildMessages,
  GatewayIntentBits.MessageContent,] });

client.on(Events.ClientReady, () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on(Events.MessageCreate, (message) => {
    if (message.content === "こんにちは") {
      message.reply("こんにちは!");
    } 
});

const token = "先程コピーしたトークンを貼り付け";

client.login(token);

コードはこれだけで終わりです!
意外と簡単だったのではないでしょうか…?

実行例

お疲れさまでした!!
それでは実際にBotを使ってみましょう!

コマンドラインでnode bot.jsとタイプして、Logged in as ~!と返ってこれば、Botは正常に起動しています。

ここで、Discordのあるチャンネルで「こんにちは」とメッセージを送信すれば、画像のように「こんにちは!」と返ってくるはずです!
Screenshot 2022-12-14 at 3.24.19 PM.png

SlackからDiscordに移行した感想

最後に、SlackからDiscordに移行した感想を書いていきます。

良かった点

1. コミュニケーションツールが統一できた

今までメインでSlackと、通話や画面共有が必要なときなどにDiscordを使用していましたが、全てDiscordに統一することができて、少し楽になりました。

2. Botを開発することで自動化できるようになった

この記事の本題でもありますが、これは本当に作ってよかったと思います。開発するのに多少手間取るところもありましたが、その分のメリットは十分ありました。
また、今後新たに機能を追加するとなった時にも、JavaScriptのファイルを変更するだけで実装できるので、この点も👍です。

以下、開発したBotに搭載している機能一覧です↓

  • サーバー入室時のDM送信
  • リアクションによるtimesチャンネルの自動作成
  • ボイスチャンネル入室時間のランキング送信
  • Firebaseと連携した諸々の機能…

イマイチだった点

1. Botの挙動がたまに不安定

これはdiscord.jsの問題なのか、自分の脳力の問題なのかはわからないですが、ある時はエラーが出るけど、この時は出ないといった感じで、若干不安定になることがあります。

2. 常時稼働させるためのサーバーが必要

これは当たり前で仕方のないことですが、常時稼働させるにはNode.jsが動かせるサーバーを用意する必要があります。レンタルサーバーだとXServerなどが利用でき、Raspberry Piでも動かすことができます。
現状はRaspberry Pi + Ubuntu Server 22.04 LTSで運用しています。

おわり

最後まで読んでいただきありがとうございます。予想以上に長くなってしました…
今回、初めてQiitaに記事を書きましたが、やっぱり頭の中が整理されるのでアウトプットって非常に大事だなと思いました。来週ももう1本アドベントカレンダーの記事を書きますが、その後も更新していきたいと思います。

それでは~

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?