Discord Botの作成② メッセージを返す機能の実装とbotの起動【Python】
前回に引き続きディスコのbot作成の覚え書き。今回はPythonでのソースコードの記述と、botの起動を行う。
第1回目の記事はこちら
Discord Botの作成① 開発者ポータルでの設定とサーバーへの導入
第3回目の記事はこちら
Discord Botの作成③ botを常時起動させる【ConoHa WING】
2024年10月13日
トークンの取得
botの中身を作成するにあたって、後に必要となるトークンの取得を行う。
前回操作を行った、Discordの開発者ポータル(Discord Developer Portal)へ移動。
画面左のメニュー群の『Bot』より、『Reset Token』を選択する。
botのトークンをリセットするかを確認されるので、『Yes, do it!』を選択する。
パスワードを確認された場合、開発者ポータルにログインしているディスコアカウントのパスワードを入力する。
以上を完了するとトークンが発行される。
『Copy』を選択することで、このbotのトークンをクリップボードに保持できる。
トークンの取得はこれで完了。
Pythonでソースコードを書く
今回はbotに次の機能を組み込む。
- アクティビティステータスの表示
- 特定のメッセージに返信する
拡張子が『.py』のファイルに以下を記述する。
先ほど取得したトークンは『取得したトークンを入力』の箇所に入力する。
import discord
import re
TOKEN = '取得したトークンを入力'
intents = discord.Intents.all()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
await
client.change_presence(activity=discord.Game(name="任意の文字列"))
@client.event
async def on_message(message):
if message.author.bot:
return
if message.author == client.user:
return
if message.content.startswith('hello'):
await message.channel.send('Hello!')
if message.content.startswith('おもち'):
await message.channel.send('もちもち')
client.run(TOKEN)
ソースコードの詳細
(bot実装までの操作方法でないため、読み飛ばしても問題ない。)
○ モジュールの呼び出し
『discord』はDiscord用のAPIラッパー。
『re』は、文字列がマッチしているかの判定に利用。
import discord
import re
○ 接続に必要なオブジェクトの生成
今回はひとまず『discord.Intents.all()』としているため、開発者ポータルにて『Privileged Gateway Intents』を有効にすること。
intents = discord.Intents.all()
client = discord.Client(intents=intents)
○ アクティビティステータスの表示
ディスコ表示時の『○○をプレイ中』に当たる箇所を編集する。
以下では『任意の文字列』が『○○』の箇所に表示されるようになる。
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
await
client.change_presence(activity=discord.Game(name="任意の文字列"))
○ メッセージを受け取る
メッセージを受け取るための処理。
ディスコにて、"botがメッセージの閲覧を許可されているチャンネル"に投稿されたメッセージを確認する。
@client.event
async def on_message(message):
if message.author.bot:
return
○ 特定のメッセージに返信をする
以下の場合は、『hello』を送るとbotが『Hello!』を返し、『おもち』を送るとbotが『もちもち』を返す。
if message.author == client.user:
return
if message.content.startswith('hello'):
await message.channel.send('Hello!')
if message.content.startswith('おもち'):
await message.channel.send('もちもち')
○ ソースコードの終了
client.run(TOKEN)
botを起動する
あとは作成したソースコードを実行することで、botが起動する。
Macのターミナルで行う場合は、
$ pip install discord.py
で、Discordのモジュールをインストールした後に、cdで先ほど作成したファイル(ここでは『bot_omoti.py』とする)のあるディレクトリまで移動し、以下のコマンドで実行する。
$ python3 bot_omoti.py
Discord上でbotがオンラインになれば、入力された特定のメッセージに対してbotが反応するようになる。
ひとまずこれでbotは動作する。
しかし、botは一定時間が経過すると自動でオフラインになる。
再度オンラインにするには改めてコマンドを実行する必要があるが、bot運用でこの手法は現実的でない。
次回はbotを常時オンラインにする設定を行う。