はじめに
discord botを作りたいと思った時に、pythonで実装したいと思ったのですが、discord.pyが2021年8月に開発が停止しているということで、代わりにそのフォークとなるpycordで実装してみることにしました
今回は、botがチャットで反応してくれる簡単なbotを実装しようと思います
環境
- Python 3.12.2
- py-cord 2.5.0
botアカウントの作成
まず、discord developer portalでbotアカウントを作成します。
右上のNew Applicationをクリックしてbotの名前を入力します
今回は"pycord test"とします
botの名前を入力する欄の下にあるチェックリストにチェックを入れ、Createボタンを押したらアカウントの作成はokです
botのアカウントの設定
アカウントを作ったら下の画面になると思います
左のサイドバーからBotを選択して、
下の方にあるReset Tokenでトークンを発行してください
発行したトークンは必ずメモをしてください
トークンを発行したら、下にスクロールすると出てくるPrivileged Gateway Intentsのチェック欄3つにチェックを入れてください
これにチェックを入れないとbotの機能に制限がかかるため、一応全てチェック入れておくといいと思います
botをサーバーに参加させる
左サイドバーのOAuth2をクリックして、下の方にスクロールすると下の画像のようなOAuth2 URL Generatorというチェック欄が出てくると思います。この中にあるbotにチェックを入れます。
さらに下にスクロールすると、botの権限をどうするかBOT PERMISSIONSで設定できるので設定しましょう。今回はAdministratorに設定します。
今回はめんどくさいので全権限を付与できるAdministratorにしています
特定の権限を付与だけをしたい場合は、権限を個別に選択してください
下のGENERATED URLにURLが出てくるので、それをコピーしてネットで検索をかけましょう
すると、下の画面が出てくるので、どんどんはいを押していきましょう(今回は自分で作ったサーバーにぶち込んでいます)
一応、導入したサーバーに招待がしっかりされているか確認しましょう
実際にコードを書いていく
ここからコーディングしていきます
まず、pycordをインストールします
pip install py-cord
まず実行ファイルmain.pyを作成してコードを書いていきます
import discord
# アクセストークンを設定
TOKEN = "YOUR_ACCESS_TOKEN"
#インテントを取得
intents = discord.Intents.all()
#botの設定
bot = discord.Bot(intents=intents)
#起動するとターミナルに表示
@bot.event
async def on_ready():
print("ready!")
# pycordがメッセージを受け取ったら実行されるイベントハンドラ
@bot.event
async def on_message(message: discord.Message):
# メッセージが"hello"だった場合、"Hello!"と返信する
if message.content == 'hello':
await message.reply("Hello!")
#botの起動
bot.run(TOKEN)
このコードはメッセージで "hello"と打ったら、botがhelloと返してくれるようになっています
@とついている部分はデコレータというものです
すでにある関数に処理の追加が出来るものです
(自分はこれを知らなかったので、書いておきます)
on_messageはイベントハンドラなので、メソッド名を変更をすると、思うような動作をしません
botを起動してみる
ターミナルで以下のコードを実行すると、botを起動することができます
python main.py
disocord上で実際動かしてみると
ちゃんと実行されました!
最後に
pycordはdiscord.pyからフォークされているのもあって、discord.pyのドキュメントに書いてあるコードが動くことがあります
discord botをpycordで作る際はそちらも参考にしてみてください(それでもわからなかった時はgpt使いました、、、)