DeepL-APIを利用して英語から日本語に翻訳できるDiscordのbotを作成する

# はじめに
自分は英語がとても苦手ため、今までわからない単語や文章が出てきたら翻訳サイトを利用していました。
しかし、 DeepLを利用するためにGoogleなどの検索サイトを開くよりも常に開いているDiscord上で翻訳できたら楽になるなと思い英語を日本語に翻訳してくれるボットを作成しました。
（今回Mac環境で行なっています。）

# 使用したAPIの紹介
https://www.deepl.com/ja/pro-api/?utm_term=deepl%20api&utm_campaign=JP%7CSearch%7CC%7CBrand%7CJapanese%7CExact&utm_source=adwords&utm_medium=ppc&hsa_acc=1083354268&hsa_cam=20425357900&hsa_grp=152104711613&hsa_ad=669146460381&hsa_src=g&hsa_tgt=kwd-900300572383&hsa_kw=deepl%20api&hsa_mt=e&hsa_net=adwords&hsa_ver=3&gad_source=1&gclid=Cj0KCQiAsburBhCIARIsAExmsu7UPVASfNc8q7OWtNX_oKweTXnadIhkn2BWsK_6OsSrj84CSC8fzCgaArM4EALw_wcB

Freeプラン（無料）
・すべての機能をご利用可能
・DeepL REST APIへのアクセス
・1か月に500,000文字まで翻訳
・1,000個の用語集（一部言語のみ）

Proプラン（月/６５０円）
・万全のセキュリティ対策
・DeepL REST APIへのアクセス
・翻訳できるテキスト量に制限なし
・1,000個の用語集（一部言語のみ）
・ご利用分だけお支払い（1,000,000文字あたり¥2,500）
・リクエストを優先的に処理

今回は、Freeプランで作成。

# 　Discord botの作成
以下のリンクからDiscordにログインする。
https://discord.com/developers/applications
右上のNew Applicationを押し、botの名前を決める。

![スクリーンショット 2023-12-08 17.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636470/5131df5b-627b-ede2-e3e4-c690fce7982b.png)
botを作成したらTOKENをメモしておく。（後で使うため）
![スクリーンショット 2023-12-08 17.22.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636470/9392722d-b893-cbe6-34b1-82470afd2608.png)

URL GeneratorでURLを招待用のURLを作成する。
![スクリーンショット 2023-12-08 17.27.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636470/1f751178-9e36-cdd0-bc74-dd4323256191.png)
作成したURLをブラウザのURL欄に入力し実行する。
その後、botを入れたいサーバーに招待する。

# 　コード・環境を作成
 1,Python３とpip3をインストールします。
 以下の内容をターミナルに入力します。

 ```ruby:bash
sudo apt update
sudo apt install python3
sudo apt install python3-pip
```

2,ライブラリのインストールをします。
```ruby:bash
pip3 install discord.py
pip3 install requests
```
3、メインになるコードを作成します。
```ruby:index.pyimport discord
from discord import Intents
import requests

TOKEN = 'YOUR_DISCORD_BOT_TOKEN'
DEEPL_API_KEY = 'YOUR_DEEPL_API_KEY'
DEEPL_API_ENDPOINT = 'https://api-free.deepl.com/v2/translate'

intents = 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('!translate'):
        # メッセージから翻訳対象のテキストを取得
        text_to_translate = message.content[11:]

        # DeepL APIに翻訳リクエストを送信
        translation_params = {
            'auth_key': DEEPL_API_KEY,
            'text': text_to_translate,
            'target_lang': 'ja',  # 翻訳先の言語（ここでは日本語に設定）
        }
        response = requests.post(DEEPL_API_ENDPOINT, data=translation_params)

        # 翻訳結果を取得してDiscordに送信
        if response.status_code == 200:
            translation_result = response.json()['translations'][0]['text']
            await message.channel.send(f'Translation: {translation_result}')
        else:
            await message.channel.send('Translation failed. Please try again later.')

client.run(TOKEN)

```
YOUR_DISCORD_BOT_TOKENに先程メモしたTOKENを入力します。
YOUR_DEEPL_API_KEYに、自分のDeepl-APIの認証キーを入力します。

4,最後に実行します。
```ruby:bash
python3 index.py
```
入力後 以下の内容が出力されたら成功です。
![スクリーンショット 2023-12-08 19.43.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636470/0d334b54-aa04-84d9-4278-bd7d47abc885.png)

# 結果

![スクリーンショット 2023-12-08 15.53.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636470/ea386b08-5dbb-cb11-4191-e196574dcede.png)
今回は、!translate の後に英語を入力したら翻訳してくれるように作成しました。

# 注意点
今回のbotは、４の実行で起動する仕組みになっているので実行した後にPCを落としてしまうとbotが使えなくなってしまいます。そのため、個人のサーバー以外で使う際には注意しましょう。
また、DeeplーAPIのFree Planでは、50万文字までになっているため注意しましょう。

# まとめ
今回は、Deepl-APIを利用してDiscordのbotを作成してみました。
作成する前まで、Pythonなどプログラミング初心者で作れるか心配でしたが無事作成できてよかったです。
また機会があればDiscordのbotなどを作成してみたいと思います。
ここまで見て頂いてありがとうございました。