参考にした記事
この記事を書いたモチベーション
DiscordのAPIに以前パーミッション回りの変更があったらしく、
ググって見つかった記事だと、その辺りの取り扱いが古いやり方になっていたので、
令和5年最新版のやり方を残しておきたいというのが理由です。
1) アプリケーションの作成
https://discord.com/developers/applications
にアクセスして、New Applicationのボタンをクリックする
2) アプリケーションの名前を入力する
3) MESSAGE CONTENT INTENTを有効にする
BotメニューからMESSAGE CONTENT INTENTのスイッチをONにする
Save Changesボタンをクリックする
4) Tokenを取得する
BotメニューからReset Tokenボタンをクリックする
Yes, do it!ボタンをクリックする
表示されたTokenを控えておく
5) BotをDiscordサーバーに登録する
OAuth2>URL Generatorメニューで
・SCOPES:botをチェック
・BOT PERMISSIONS:Read Messages/View Channels、Send Messagesをチェック
・GENERATED URLのCOPYボタンをクリックする
コピーしたURLをブラウザの別窓で開く
Botを追加するDiscordサーバを選ぶ
Botに与えるパーミッションを確認する
ここで余分なパーミッションを与えないことはサーバを守る上で非常に重要。
人間であることを証明する
BotがDiscordサーバに登録された
6) Pythonダウンロード&インストール
7) Discord.pyのインストール
py -3 -m pip install -U discord.py
8) Botアプリの作成
下記をdiscord_bot.pyとして保存する
Tokenは、4)の手順で控えたもの
Channel IDは、チャンネルを表示したときのURLの末尾の数字です
https://discord.com/channels/xxx/yyy
ならyyyの部分
import discord
TOKEN = '[Your Token]'
CHANNELID = [Your Channel ID]
intents = discord.Intents.default()
intents.message_content=True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print('ログインしました')
@client.event
async def on_message(message):
if not message.author.bot:
channel = client.get_channel(CHANNELID)
await channel.send(message.content)
client.run(TOKEN)
discord.Intents.all()
を使うようになっている記事が多数見つかりますが、
3)と5)で設定したパーミッション設定だとパーミッション不足でエラーになります。
discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.
恐らく、3)のINTENTの設定ですべてONにすればいけるような気がしますが、
不要なパーミッションは付与しないに越したことはありません。
9) Botを動かす
python discord_bot.py
こんな感じの表示が出ればOK
>python discord_bot.py
[2023-09-03 10:09:50] [INFO ] discord.client: logging in using static token
[2023-09-03 10:09:51] [INFO ] discord.gateway: Shard ID None has connected to Gateway (Session ID: xxx).
ログインしました
10) Botの動作を試す
動きましたね
11) デプロイ
一時的にBotのテストをする場合は、PC上で動かすのでも良いのですが、
運用に乗せようと思ったら、24時間稼働のサーバに乗せる必要があります。
試しにEC2サーバ立ててアプリ動かしてみたら普通に動いたので、なんらかサーバがあればよいようです。
昔はHerokuの無料枠が使えたのですが、
Herokuも含めて、時間貸しだと0.005$/hourといった感じでしょうか。
自分が見て回った感じだと、Amazon Lightsailの3.5$/moが一番安いような気がします。
それかEC2を年契約するとか、長期割引を効かせるともっと安くなるかも。