ChatGPTをDiscordに連携してみた。

よく話題になっているchatGPTを使っていろいろやりたいと思っていたけどいちいちchatGPTのwebサイトにいって使うのが面倒…

いい感じのアプリにもなっていないので、Discordと連携させて手軽に使いたいと思ったので作ったときの記録を残します。

ちょっとした調べ物をするときにすぐにChatGPTに聞けるようになったので結構便利だったので気になった方はぜひ作ってみてください。

# 作るもの

下記のように「chat XXXX」とDiscordに投稿すると、XXXXをChatGPTへ問い合わせた結果をDiscordで確認できるものを作成します。

![Discord_bot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3299022/8df85f42-b5c8-3c60-fb76-40b7268a04f6.jpeg)


# 必要なもの

### Discordのアカウント

Discordのアカウントを持っていない人は下記などを参考に適当にアカウントを作成してください。

[https://support.discord.com/hc/ja/articles/360033931551-の始め方](https://support.discord.com/hc/ja/articles/360033931551-%E3%81%AE%E5%A7%8B%E3%82%81%E6%96%B9)

### Discordのbot

ボットの作成方法は以下を参照。使うプログラムもこのページで紹介されているdiscord.pyを利用したものになります。

[https://www.freecodecamp.org/japanese/news/create-a-discord-bot-with-python/](https://www.freecodecamp.org/japanese/news/create-a-discord-bot-with-python/)

### ChatGPTのAPIアカウント

ChatGPTのAPIアカウントの作成方法は以下を参照。

[https://saasis.jp/2023/03/06/遂に公開されたchatgpt-apiとは？-利用するまでの流れ【/](https://saasis.jp/2023/03/06/%E9%81%82%E3%81%AB%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%9Fchatgpt-api%E3%81%A8%E3%81%AF%EF%BC%9F-%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%BE%E3%81%A7%E3%81%AE%E6%B5%81%E3%82%8C%E3%80%90/)

### 起動させるサーバ

24h立ち上げているマシンがなにかすでにある人であれば問題ないが、無い人に向けたおすすめのbot用サーバ

- AWS EC2(t4g.small)
- Raspberry Pi

両方試したが、私が使っているRaspberry Pi3は10年近く前のものなので、動作が安定しなかった。EC2(t4g.small)は2023年12月31日まで無料トライアル中(1ヶ月あたり最大750時間)なので動かすサーバが無い人にはおすすめです。

[https://e-kamo.net/t4g-small-free-trial](https://e-kamo.net/t4g-small-free-trial)

## 利用しているソフトウェアとバージョン

- Python 3.9.13

# ライブラリのインストール

discordのbotを制御するdiscord.pyとChatGPTのAPIを利用するためのライブラリをインストールします。

```shell-session
# python3 -m pip install -U discord.py
# pip3 install openai
```

# プログラムの作成

下記のプログラムでをchatGPT.pyという名前で作成します。

Discordのbot_keyとChatGPTのAPI_keyは取得したものに置き換えてください。

```python
#!/usr/bin/env /opt/Python-3.9.13/python

import discord
import openai

client_key = "Discordのbot_key"
openai.api_key = "ChatGPTのAPI_key"

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('chat'):
        quesion = message.content.split('chat')[1]
        wait_message = "「" + quesion + "」について調べるよ。\n"
        await message.channel.send(wait_message)
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "user", "content": quesion},
            ]
        )
        await message.channel.send(response["choices"][0]["message"]["content"])

client.run(client_key)
```

# プログラムの実行方法

作成したプログラムをpythonで実行します。

```shell-session
# python3 chatGpt.py
```

実行結果

We have logged in as (Discordのbotの名前)　が表示されればbotが正常に起動しています。

```shell-session
# python3 chatGpt.py
2023-03-25 15:42:21 INFO     discord.client logging in using static token
2023-03-25 15:42:22 INFO     discord.gateway Shard ID None has connected to Gateway (Session ID: a4467d07dc16abae8c21f3b885a2990f).
We have logged in as XXXX
```

# 動作確認

chat XXX(ChatGPTに聞きたいワード)　を入力して回答が表示されればokです。

![Discord_bot_test.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3299022/fb0b861c-0b2e-7bb8-2c7a-6bb3a766e4a4.jpeg)


試しに今回作成するにあたって必要なdiscordのbotアカウントの作り方を聞いてみました。

## 質問

chat discordのbotの作り方を教えて

## 回答
discordのbotを作るためには、discordアカウントが必要です。以下の手順を実行して、botを作成できます：

1. discord Developer Portalにアクセスします：https://discord.com/developers/applications

2. "New Application"を選択して、アプリケーションを作成します。

3. アプリケーションの設定で、"Bot"を選択して、新しいBotを作成します。

4. Botの名前、アイコンなどの設定を実行して、"Copy"を選択して、Botのトークンをコピーします。

5. コマンドラインに移動し、Discord botを作成するために必要なモジュールをインストールします。

例えば、discord.pyの場合は以下を実行します：
```shell-session
pip install discord.py
```
6. 自分のプロジェクトにdiscord botのトークンを設定します。
```python
import discord

client = discord.Client()

TOKEN = 'your_token_here'

client.run(TOKEN)
```

7. Botを作成し、Discordサーバーのコマンドを実行できるように、適切なコードを書いてBotをプログラムします。
```python
@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('!hello'):
        await message.channel.send('Hello!')
```
8. Botを起動します。
```python
client.run(TOKEN)
```

以上の手順を実行すれば、discord botを作成できます。もちろん、より複雑なBotを作成するために、discord.pyなどのリファレンスドキュメントを参照することをお勧めします。
Discord Developer Portal
[Discord Developer Portal — API Docs for Bots and Developers](https://discord.com/developers/applications)

# おわりに

連携するための手順をまとめましたが、botの作り方のように簡単なものであればChatGPTが教えてくれた手順に沿って実施するだけで実施できそうなことがわかりました。

AIがもっと進歩して、開発周りが楽になってくれると嬉しいですね。