LoginSignup
3
3

pycordでdiscordbotを作る

Posted at

はじめに

discord botを作りたいと思った時に、pythonで実装したいと思ったのですが、discord.pyが2021年8月に開発が停止しているということで、代わりにそのフォークとなるpycordで実装してみることにしました
今回は、botがチャットで反応してくれる簡単なbotを実装しようと思います

環境

  • Python 3.12.2
  • py-cord 2.5.0

botアカウントの作成

まず、discord developer portalでbotアカウントを作成します。

スクリーンショット 2024-05-03 14.50.18.png

右上のNew Applicationをクリックしてbotの名前を入力します
今回は"pycord test"とします

スクリーンショット 2024-05-03 14.52.20.png

botの名前を入力する欄の下にあるチェックリストにチェックを入れ、Createボタンを押したらアカウントの作成はokです

botのアカウントの設定

アカウントを作ったら下の画面になると思います

スクリーンショット 2024-05-03 14.57.20.png

左のサイドバーからBotを選択して、

スクリーンショット 2024-05-03 14.59.24.png

下の方にあるReset Tokenでトークンを発行してください

トークンとは?

botにおける、ユーザーIDとパスワードにあたる文字列のことです

発行したトークンは必ずメモをしてください

トークンを発行したら、下にスクロールすると出てくるPrivileged Gateway Intentsのチェック欄3つにチェックを入れてください

スクリーンショット 2024-05-03 15.07.29.png

Privileged Gateway Intentsとは

discordの高度な機能にアクセスするための設定です
それぞれにチェックを入れると以下のことができるようになる(と言われています)

  • PRESENCE_INTENT
    サーバーのユーザーステータスを取得できます
  • SERVER_MEMBERS_INTENT
    サーバーのメンバーに関する情報の取得、ロールの取得などできます
  • MESSAGE CONTENT INTENT
    サーバーに送信されたメッセージの取得

これにチェックを入れないとbotの機能に制限がかかるため、一応全てチェック入れておくといいと思います

botをサーバーに参加させる

左サイドバーのOAuth2をクリックして、下の方にスクロールすると下の画像のようなOAuth2 URL Generatorというチェック欄が出てくると思います。この中にあるbotにチェックを入れます。

スクリーンショット 2024-05-03 15.25.56.png

OAuth(オーオース)とは

アプリケーションやサービスが、ユーザーの許可を得て、特定の情報にアクセスするなどの行動をするための認証プロトコル

さらに下にスクロールすると、botの権限をどうするかBOT PERMISSIONSで設定できるので設定しましょう。今回はAdministratorに設定します。

今回はめんどくさいので全権限を付与できるAdministratorにしています
特定の権限を付与だけをしたい場合は、権限を個別に選択してください

スクリーンショット 2024-05-03 15.39.58.png

下のGENERATED URLにURLが出てくるので、それをコピーしてネットで検索をかけましょう
すると、下の画面が出てくるので、どんどんはいを押していきましょう(今回は自分で作ったサーバーにぶち込んでいます)

スクリーンショット 2024-05-03 15.46.26.png

スクリーンショット 2024-05-03 15.47.09.png

この画面に来たら、botのサーバーへの招待は完了です
スクリーンショット 2024-05-03 15.47.16.png

一応、導入したサーバーに招待がしっかりされているか確認しましょう

スクリーンショット 2024-05-03 15.49.54.png

実際にコードを書いていく

ここからコーディングしていきます
まず、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上で実際動かしてみると

スクリーンショット 2024-05-03 17.14.42.png

ちゃんと実行されました!

最後に

pycordはdiscord.pyからフォークされているのもあって、discord.pyのドキュメントに書いてあるコードが動くことがあります

discord botをpycordで作る際はそちらも参考にしてみてください(それでもわからなかった時はgpt使いました、、、)

3
3
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
3
3