2024年08月01日 備忘録

Discord Botの作成② メッセージを返す機能の実装とbotの起動【Python】

サムネイル画像

前回に引き続きディスコのbot作成の覚え書き。今回はPythonでのソースコードの記述と、botの起動を行う。

第1回目の記事はこちら

第3回目の記事はこちら

2024年10月13日

トークンの取得

botの中身を作成するにあたって、後に必要となるトークンの取得を行う。

前回操作を行った、Discordの開発者ポータル(Discord Developer Portal)へ移動。

画面左のメニュー群の『Bot』より、『Reset Token』を選択する。

『Reset Token』を選択

botのトークンをリセットするかを確認されるので、『Yes, do it!』を選択する。

『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を常時オンラインにする設定を行う。