Discord 簡易ボット
Discord のボットはサーバーに常駐させて使うものがほとんどである。常駐させずに、自分宛に特定のメッセージを送る、あるいは自分が管理するサーバー内のチャンネルに投稿する、といった動作をして、終わったらログアウトする簡易ボットを作成した。
定期的に crontab で実行するプログラム内で、実行結果を送信するような場合に便利である。
準備
通常のボットと同様に、以下の準備が必要となる。
- ボットアカウントを作成し、トークンを取得する。トークンを他者と共有してはならない。
- サーバーのチャンネルに投稿する場合には、サーバーに招待する。
python3 -m pip install -U discord.py
によって discord.py を読み込む。
次のモジュールを espresso.py
という名前で保存する。
実行方法
以下の Python コードで、ユーザー宛に「やっほー」というメッセージを送信し、チャンネルに「こんにちは!」という投稿をする。パラメータはあらかじめ以下のように設定する。
path
(str 型)はespresso.py
が保存されているディレクトリである。同じディレクトリに入れる場合には最初の2行は不要である。user_id
(int 型)には「やっほー」と送信するユーザーのID(ユーザー名とは無関係の整数)を入れる。ユーザー設定の「詳細設定」で「開発者モード」をオンにすると、ユーザーを右クリックすることで「IDをコピー」することができるようになる。channel_id
(int 型)には「こんにちは!」と投稿するチャンネルのID(整数)を入れる。開発者モードにすると、チャンネルを右クリックしてIDをコピーできる。token
(str 型)にはボットのトークンを入れる。プログラムを共有する場合にはトークンを共有しないように別ファイルで管理するなどの注意をする。
import sys
sys.path.append(path)
import discord
import espresso
client = espresso.Client(intents=discord.Intents.default())
client.send_dm(user_id, 'やっほー')
client.send_channel(channel_id, 'こんにちは!')
client.run(token)
補足
- client.send_dm と client.send_channel はそれぞれ何回実行しても良いが、client.run(token) で投稿をした後は同じプログラム内では投稿できなくなる。
- 特定のユーザーID宛にメッセージを送る send_dm_me(message) というメソッドや、特定のトークンでボットを走らせる run_bot() というメソッドを Client クラスに作っておくことで、より手軽に呼び出すことができる。
参考
- discord.py ドキュメント
- How to create a non-interactive Discord bot (Honza Javorek, Feb 6, 2021)