Discord.pyを使ってbotを作っていたんですが、いつの間にか開発終了してしまっていたらしいです…※詳しく
お世話になりました…!
引越し先として、Discord.jsさんにお世話になろうと思います。
今回は環境作成から、おはよう!といったたらおはよう!と返してくれるところまで実施したいです。
discordのBOTはこれからスラッシュコマンドが主流になるという話を聞いたので、それも取り入れていこうと思います。(/と入れると実行できるコマンドの事です)
目次
・[Discord.jsとは何か](#discordjsとは何か) ・[環境](#環境) ・[フォルダの作成](#フォルダの作成) ・[package.jsonファイルの作成](#packagejsonファイルの作成) ・[discord.jsのインストール](#discordjsのインストール) ・[コードを書く環境整備](#コードを書く環境整備) ・[BOTの設定](#botの設定) ・[ボットをサーバーへ招待する](#ボットをサーバーへ招待する) ・[コマンドの登録](#コマンドの登録) ・[BOTの起動](#botの起動)#環境
Windows10
node v16.13.0(今からインストールします)
discord.js 13.3.1(今からインストールします)
##Node.jsのインストール
Node.jsのWebサイトからインストールします。
「Recommended For Most Users」=「推奨」という意味らしいのでそちらをインストールしてみます。
npm( Node Package Manager)のインストールが必要らしいですが、上記のインストールで完了するらしいです。
コマンドプロンプトでnode -v
を実行してv1×.××.×
が返ってきたらOKです。
##フォルダの作成
PC上の好きな場所にフォルダを作成します。
このフォルダで開発していきます。
##package.jsonファイルの作成
- コマンドプロンプトを開きます
- 上記で作成した作成したフォルダに移動します(
cd
コマンドで) -
npm init
を実行します - 色々質問されますが全てEnterキーで進みます(公開する場合はlicenseは確認しておいた方がいいらしいです)
- 作成したフォルダ内にpackage.jsonファイルができていたらOKです
##discord.jsのインストール
先ほどと同じ要領で、作成したフォルダでnpm install discord.js
を実行します。
npm install discord.js @discordjs/rest discord-api-types
これも実行します。
##コードを書く環境整備
メモ帳でも開発はできますが、コードエディタを使用したほうが便利です。
私は下記の通りインストールしました。
- Visual Studio Code:コードエディタです。リンク先からダウンロードできます。
-
ESLint:JavaScriptの静的検証ツールです。
npm install -g eslint
でインストールできます。(eslint -v
でバージョンが返ってきたらOK) - Visual Studio Code : ESLint :Visual Studio Codeの拡張機能です。拡張ボタンからインストールします。
#BOTの設定
BOTを作成して名前と画像を登録します。
-
開発者ポータルを開きます
-
名前を付けて「Create」を押します
-
これでbotが追加できました!
#ボットをサーバーへ招待する
https://discord.com/oauth2/authorize?client_id=<ここにclient_idを入れます>&scope=bot+applications.commands
- 追加したいサーバーを選んで認証します
- 追加したサーバーにbotが入ってくればOK!
#コマンドの登録
いよいよBOTの中身を書いていきます!
@discordjs/builders @discordjs/rest discord-api-typesをインストールします。
npm install @discordjs/builders
npm install @discordjs/rest
npm install discord-api-types
さきほど作ったフォルダに「config.json」というファイルを作成します。
ここに設定を書き込んでいきます。
ここに書き込んだサーバーに対してスラッシュコマンドが使えるようになります。
{
"clientId": "開発者ポータルの AppName> Oath2> ClientID",
"guildId": "導入したいサーバーを右クリックして「IDをコピー」した値を入れます",
"token": "ここにトークンを書きます"
}
※トークンは人に教えてはいけません!
さきほど作ったフォルダに「deploy-commands.js」というファイルを作成します。
ここにコマンドを書き込んでいきます。
/hello
というスラッシュコマンドを作成します。
const { SlashCommandBuilder } = require('@discordjs/builders');
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const { clientId, guildId, token } = require('./config.json');
const commands = [
new SlashCommandBuilder().setName('hello').setDescription('hello!と返事します!')
]
.map(command => command.toJSON());
const rest = new REST({ version: '9' }).setToken(token);
rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands })
.then(() => console.log('Successfully registered application commands.'))
.catch(console.error);
ここでコマンドプロンプトにnode deploy-commands.js
と打ち込むと、サーバーでスラッシュコマンドが使えるようになります。
ただ、これだとBOTがまだオフラインなので返事が返ってきません。
#BOTの起動
BOTを起動させます。
さきほど作ったフォルダに「index.js」というファイルを作成します。
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
const { token } = require('./config.json');
client.on('ready', () => {
console.log(`${client.user.tag}がサーバーにログインしました!`);
});
client.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return;
if (interaction.commandName === 'hello') {
await interaction.reply('hello!');
}
});
client.login(token);
コマンドプロンプトからnode index.js
を打ち込むと[BOTの名前]がサーバーにログインしました!
と返ってきます。
また、招待したサーバーでBOTがオンラインになります。
挨拶返してくれましたね!嬉しい!
詳しい中身については書けていない(良く分かっていない)ので、次回引き続き作成していこうと思っています!