動かざることバグの如し

近づきたいよ 君の理想に

TypeScriptでDiscordBotを作ってみる

やりたいこと

Discordは便利なコミュニケーションアプリケーションであり、Discord botを開発することは、プログラミングに興味を持っている人にとって魅力的なプロジェクトの一つです。 今回は、Discord botをTypeScriptで作成し、!pingコマンドを送信すると、pong!が返ってくるようにする作業手順について説明します。

事前準備

このプロジェクトを完了するには、以下の環境が必要です。

  • TypeScript
  • node.js 18

TypeScriptとnode.jsをインストールするには、それぞれの公式Webサイトから入手することができます。 また、Discord bot開発の初心者である場合は、Discord Developer Portalから閲覧できる公式APIを把握することが重要です。

作業手順

以下の手順に沿って、Discord botの作成を進めていきます。

1. discord.jsをインストールする

discord.jsをインストールすることで、JavaScript/TypeScriptでDiscord botを作成することができます。以下のコマンドを使用して、discord.jsをインストールしましょう。

npm install discord.js

2. ソースコードを記述する

以下のTypeScriptコードを記述し、ファイル名をdiscord_bot.tsとしましょう。これにより、discord.jsをインポートし、botとして動作することが設定されます。また、@types/discord.jsをインストールすることで、TypeScriptでDiscord botを作成することができます。

import { Message, Client } from 'discord.js';

const client = new Client({
  intents: ['Guilds', 'MessageContent', 'GuildMessages'],
});

client.once('ready', () => {
  console.log('Ready!');
});

client.on('messageCreate', async (message: Message) => {
  if (message.author.bot) return;
  if (message.content.startsWith('!ping')) {
    message.channel.send('pong!');
  }
});

client.login(process.env.TOKEN);

3. Discord Developer Portalトークンを取得する

BotをDiscord上で動かすためには、Discord Developer PortalBotトークンを取得し、環境変数に設定する必要があります。 設定方法は以下の記事を参考にしてみてください。

Discord Botを作る手順

export TOKEN=xxxx のように環境変数を設定し、以下のコマンドを使用して、Botを実行しましょう。

node discord_bot.ts

4. BotをDiscordに招待する

最後に、BotをDiscordサーバーに招待する必要があります。Botを管理しているサーバーにアクセスし、Applicationsセクション、OAuth2タブに移動します。 スコープで以下の項目をチェックしたら、選択された権限を付与するためにURLが生成されます。URLを使用して、Botをサーバーに追加します。

  • bot
  • messages.read
  • message.create

5. Botをテストする

Botを実行し、Discordチャンネルに!pingというテキストを送信してみましょう。Botからpong!という返信が返ってくれば、Botが正常に動作していることを確認できます。

コードの説明

以下に、discord_bot.ts内の主要コードの説明を示します。

const client = new Client({
  intents: ['Guilds', 'MessageContent', 'GuildMessages'],
});

clientは、Discord APIにアクセスするために使用されるクラスです。 インスタンスを作成すると、BOTの状態と操作を管理できます。

client.once('ready', () => {
  console.log('Ready!');
});

client.once()は、Discord APIに接続した直後の処理を指定することができます。このコードでは、BOTが正常に実行されたことを確認するために、ログにReady!と出力します。

client.on('messageCreate', async (message: Message) => {
  if (message.author.bot) return;
  if (message.content.startsWith('!ping')) {
    message.channel.send('pong!');
  }
});

client.on()は、Discordチャットにメッセージが投稿された場合に実行される関数を割り当てることができます。このコードでは、受信したメッセージが!pingから始まる場合に、pong!というメッセージを返信するように処理されます。

注意点

  • 環境変数の管理には十分注意してください。外部に公開してはいけない情報を含む可能性があります。
  • DiscordのAPIには多くのユースケースがあり、今回紹介したコードは初心者向けの非常にシンプルで基本的なものです。より高度なDiscord botを作成するためには、APIの各種コンポーネントについて調べる必要があるかもしれません。