前置き
今回はPythonとgoogletransというGoogle翻訳のAPIを使用して、メッセージを翻訳してくれるDiscordBotを作ります
環境 / インストールするもの
環境
- MacOS 11.2.3
- VisualStudioCode
- Python 3.9.4
インストールするもの
- discord.py
- googletrans
流れ
① ユーザーがメッセージを送信
② そのメッセージをbotが取得
③ googletransを使用して翻訳
④ 翻訳したものをメッセージとして送信
コード
import discord
from googletrans import Translator
token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
client = discord.Client()
translator = Translator()
@client.event
async def on_ready():
print("run")
@client.event
async def on_message(message):
# botの発言には反応しない
if message.author.bot:
return
# メッセージの言語判別
lang = translator.detect(message.content).lang
# 言語が日本語だったら
if lang == "ja":
trans_text = translator.translate(message.content, src = lang, dest = "en").text
await message.channel.send(trans_text)
# 言語が英語だったら
elif lang == "en":
trans_text = translator.translate(message.content, src = lang, dest = "ja").text
await message.channel.send(trans_text)
client.run(token)
コードはこれだけです
実行結果
いい感じ、毎日お肉食べたい
戦ったエラー達
もし同じエラーになった人がいたらすぐに解決できるようざっと書いておきます
AttributeError: 'NoneType' object has no attribute 'group'
このエラーはgoogletrans側の問題のようで下記のバージョンをインストールしたら解決しました
pip install googletrans==4.0.0-rc1
参考
https://qiita.com/maboy/items/9a1336ece11db4630858
TypeError: Object of type Message is not JSON serializable
これに関しては自分の問題で、言語判別の記述を
- lang = translator.detect(message).lang
+ lang = translator.detect(message.content).lang
こう書いてしまっていました
これだとtranslator.detectの引数をstr型で渡せていないのでそれが原因です、恥ずかしい
最後に
流石にスラングなどの精度が微妙ではあるので、今度は普段お世話になっているDeepL翻訳のAPIを使ってみて記事も上げようと思います