初めに
Discordのボット開発は一般的にdiscord.pyを用いられていますが、個人的にPycordのほうが使いやすいと思ったのでそちらの環境構築から実際に動作するまでを書いていきます。
私自身勉強しながら書いていたので、説明が不正確だったり不足している可能性があることをご了承ください。
開発はVSCodeを使っていきます
1.環境構築
まずはライブラリをインストールしていきます。
$ pip install py-cord
以下の画像のような文章が出力されたらインストールに成功です。
2.Botの作成
アカウントの作成
次にボットを作成していきます。
Discordのデベロッパーポータルでサインインしてください。
サインインに成功すると右上にNew Applicationというボタンがあるので、そこをクリックするとBotの名前が決められます。
利用規約とポリシーに同意して作成するとGeneral Informationという画面が現れます。
トークンの取得
トークンとはプログラムが今作成したアカウントを認証するのに必要なコードです。
左上のメニューからBotに移動してください。
そしたら以下のような画像の画面が現れます。
USERNAMEの欄には先ほど入力した名前が表示されているはずです。
その下にReset Tokenというボタンがあります。
ここからトークンを取得していきます。
クリックするとトークンが表示されます。
このトークンは絶対に公開しないでください。
このトークンは後程使いますので、どこかにメモしておいてください。
導入
サーバーに今作成したボットを導入していきます。
左上のメニューからOAuth2→URL Generatorに移動してください。
ここでスコープと権限を設定していきます。
今回作成するボットは一般公開を想定していないのでSCOPESはbot BOTPERMISSIONSはAdministratorにします。
権限は目的に応じて変更してください。
設定に完了すると一番下にURLが生成されます。
それをコピーしてブラウザで検索しましょう
そうすると導入するサーバーを選択することができるので開発用サーバーを選択してはいを押しましょう。
サーバーからボットが無事に導入されていることを確認したらこちらでの作業はおしまいです。
3.開発
コード
今回は /test
と入力するとボットがtest
と返してくる機能を追加します。
コードは以下の通りです。
import discord
bot = discord.Bot()
token = 'トークン'
@bot.event
async def on_ready():
print('起動しました。')
@bot.slash_command()
async def test(ctx):
await ctx.respond("test")
bot.run(token)
解説
ライブラリ・トークン
上から説明していきます。
import discord
ここではpycordのライブラリを取り込んでいます。
この1文を忘れるとボットを起動したり、機能を追加することができません。
bot = discord.Bot()
token = 'トークン'
ここではクラスとトークンを代入しています。
トークンのところには先ほどメモしておいたトークンを入れてください。
起動確認
@bot.event
async def on_ready():
print('起動しました。')
この部分はボットの起動確認を行います。
ボットが起動に成功すると、ターミナルに以下のように表示されます。
起動しました。
また、@の部分はデコレーターと呼ばれます。
これは機能を追加したりするために必須な部分で、うまく動作しないときはこれを忘れている可能性があります。
コマンド
@bot.slash_command()
async def test(ctx):
await ctx.respond("test")
ここでコマンドを追加しています。
/ の後のコマンド部分の指定はデフォルトでは関数名になっています。
もし変更したい場合は
@bot.slash_command(name = 'hello')
このようにnameにコマンドを代入してください。
また、Discordのボットはネットワークを介して動作するので、非同期処理が必須となります。
async
await
上のコードは非同期処理をするためのキーワードでasyncは関数の前に付けることで、非同期関数として定義することができます。
awaitは非同期関数内で使用され、非同期処理の結果を待つために使用されます。
await ctx.respond("test")
ここでコマンドを受け取ったチャンネルにメッセージを送信しているのでawaitが必須となっています。
起動
bot.run(token)
ここでボットを起動しています。runメソッドの中ではトークンを入れており、これがないと起動しません。
4.動作確認
無事に起動が完了すると、サーバー内でボットがオンラインになっています。
/test
と打って無事にtest
と帰ってきたら成功です。サーバーにコマンドが反映されるまでに少し時間がかかります。
終わりに
基本的な開発はこんな流れになります。
pycordの公式ドキュメントを見て、何ができるか試してみるといいと思います。