『Discord』のbotとAIの会話をできるようにしてみる
目次
はじめに
『Discord』というアプリはご存じでしょうか。
少し前はゲーマーが使用する通話用アプリとして人気がありましたが、機能が色々と拡張されていき、ゲーマー以外でもたくさんの人が使うようになっているかと思われます。
『Discord』には、botユーザを追加することができ、世界中の方が公開しているbotは便利なものがたくさんあります。もちろん、botは自作することも可能になります。
今回は簡単は、Pythonを使って『Discord』のサーバにbotを追加し、AIを利用してbotとの会話が出来るようにしてみようと思います。
(1)Discordのインストール
下記からダウンロード出来るので、インストールしましょう。
『Discord』:https://discord.com/
(2)サーバを追加する
botを参加させるためのサーバを一つ追加します。既に自分が参加しているいずれかのサーバに入れたい場合には、こちらの工程を飛ばしてください。
『Discord』を開くと画面左にサーバ一覧が表示されますので、「一覧の下にある」 +「ボタンを押下」し、サーバを追加してください。
(3)botユーザを作成する
まずは下記URLにアクセスしてください。
『Discord』開発者用ページ:https://discord.com/developers/applications
※ここでいう『開発者』とはbotを作る方を指します。
左のタブが『Applications』になっているのを確認し、右上の『New Application』ボタンを押します。
ポップアップが出てくるので、botの名前を入力し、ポリシーに同意する等のチェックボックスにチェックを入れて『Create』ボタンを押します。botが作成され、アプリのページに飛ぶと思うので、左側のOAuth2タブを開き、
『SCOPES』でbotのチェックします。
『BOT PERMISSIONS』で 『ReadMessages/View Channels』と 『Send Messages』にチェックします。
下部にURLが生成されているのでそれをコピーし、別タブで開きます。すると、botを参加させるサーバを選択できるページに遷移するので、作ったサーバを選択して参加させましょう。
左のタブからBotを選択し、『SERVER MEMBER INTENT』と『MESSAGE CONTENT INTENT』のトグルをONにします。
最後に、TOKEN欄にある『Reset Token』を押しましょう。トークンが生成されるので、どこかに控えておきましょう。
赤で塗ってあるところがトークンになります(他の人には知られないようにしておきましょう)。
(4)コーディングをする
コーディング前に、まずは下記を叩いて必要なものをインストールしておいてください。
pip install openai discord.py
pythonで作成しますので、コードは以下のようにしてみてください。これはまだ会話ではなく、ユーザが入力した文字をそのままオウム返しする処理になります。
解説はコード内のコメントを見てください!
from discord.ext import commands
import discord
intents = discord.Intents.default()
intents.members = True # メンバー管理の権限
intents.message_content = True # メッセージの内容を取得する権限
# Botをインスタンス化
bot = commands.Bot(
command_prefix=”$”, # $コマンド名 でコマンドを実行できるようになる
case_insensitive=True, # コマンドの大文字小文字を区別しない ($hello も $Hello も同じ!)
intents=intents # 権限を設定
)
@bot.event
async def on_ready():
print(“Bot is ready!”)
@bot.event
async def on_message(message: discord.Message):
“””メッセージをおうむ返しにする処理”””
if message.author.bot: # ボットのメッセージは無視
return
await message.reply(message.content)
bot.run(“控えておいたトークンをここに入れてください”)
(5)botの起動をしてテストする
(4)で作成したプログラムを保存し、cmd等で起動しましょう。最後に『Bot is ready!』と表示されれば起動できています。
では、『Discord』を開いて、botを入れたサーバを開きましょう。テキストチャットに、何でもいいので文章を入れて送信してください。
botがオウム返ししてくれると思います。
(6)AIを使用できるように設定を変更する
まず、OpenAIのAPIキーを取得します。OpenAIのアカウントが必要なので、持っていない方は作成してください。
少し長くなるので、キーの取得はここでは割愛させていただきます。
キーを取得後、コードを以下のようにします
import discord
from discord.ext import commands
import openai
# OpenAIのAPIキーを設定
openai.api_key = ‘ここに取得したAPIキー’
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix=”!”, intents=intents)
# ユーザーごとの会話履歴を保持する辞書
user_conversations = {}
@bot.event
async def on_ready():
print(“Bot is ready!”)
@bot.command()
async def chat(ctx, *, message: str):
user_id = ctx.author.id
if user_id not in user_conversations:
user_conversations[user_id] = [{“role”: “system”, “content”: “You are a helpful assistant.”}]
# ユーザーのメッセージを履歴に追加
user_conversations[user_id].append({“role”: “user”, “content”: message})
# GPT-3.5にリクエストを送信
response = openai.chat.completions.create(
model=”gpt-3.5-turbo”,
messages=user_conversations[user_id]
)
# GPT-3.5の応答を履歴に追加
assistant_message = response[‘choices’][0][‘message’][‘content’].strip()
user_conversations[user_id].append({“role”: “assistant”, “content”: assistant_message})
# 応答を送信
await ctx.send(assistant_message)
bot.run(‘DiscordBotのトークン’)
(7)テストをする
では、botを再度起動して、『Discord』のチャット欄にメッセージを打ってみましょう。今回は、頭にコマンドを入力する必要があるようにしています。ですので、
!chat こんばんは
という感じで入力してみましょう。
無事、AIが返してくれましたね!
補足:コード上で会話の履歴を保存していますが、Web上で使う場合と違い、Discord上ではそのままだとBotは会話の内容を覚えていません。その対応として会話履歴を残すようにしています。
ということで、簡潔ではありますが、『Discord』上のbotと会話をできるようにしてみました。『Discord』と連携できるアプリはたくさんあるので、ここから更に機能をどんどん拡張していくことができます。独自のBotを作って遊んでみるのも楽しそうです!