『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を作って遊んでみるのも楽しそうです!