質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.54%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1116閲覧

Discordで翻訳BOTをつくりたい。

Takumin

総合スコア3

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/09 12:03

python超初心者です。
つい数日前、ふと「Discordの翻訳ボットを自作したい!」と思い立ったのですが、エラーに永遠と阻まれて、一向に完成する気配がありません、、、。Botは英語から日本語に翻訳するものです。

python

1import discord 2 3from googletrans import Translator 4 5token = "XXX" 6CHANNELID = 000 7 8client = discord.Client(intents=discord.Intents.default()) 9translator = Translator() 10 11@client.event 12async def on_ready(): 13 print("run") 14 15@client.event 16async def on_message(message): 17 18 if message.author.bot: 19 return 20 21 else: 22 translated = translator.translate(message.content, src = "en", dest = "ja").text 23 message.channel.send(translated) 24 25client.run(token)

引用テキスト

ERROR discord.client Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\PC_User\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 409, in _run_event
await coro(*args, **kwargs)
File "C:\Users\PC_User\Documents\python練習\swiftbot\discorddazeyo.py", line 23, in on_message
message.channel.send(translated)
File "C:\Users\PC_User\AppData\Local\Programs\Python\Python310\lib\site-packages\googletrans\client.py", line 213, in translate
translated = ''.join([d[0] if d[0] else '' for d in data[0]])
TypeError: 'NoneType' object is not iterable

といういような感じになってしまします。何をどうすればいいか昨日から3時間くらい探っているのですがなにやってもダメです。どこをどう変えればいいんですかね。。
分かる方いらっしゃいましたら教えていただけると嬉しいです!あと、ほかに変えるべき点やおかしな点がありましたら是非教えていただければ嬉しいです。(一から作ったので、恐らく変なところがかなりたくさんあると思います。。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

2

ベストアンサー

intentsの問題だと思われます。

intents関連の説明はここを参考に
また
必要なintentsを探してみてください
(default()この状態です。)

py

1intents = discord.Intents.default() 2intents.message = True 3 4client = discord.Client(intents=intents)

ここからはコード内で思ったことを書かせていただきます。

on_message()関数はは非同期(async-awaitを使うシステム)なので、googletransではなく、async_google_trans_newというモジュールを使うことをお勧めします。

pip install async_google_trans_new

でできます。


上のモジュールを使うという前提で話させていただきます。

py

1import async_google_trans_new 2 3 4async def on_message(message): 5 # Botを排除 6 if message.author.bot: 7 return 8 9 # 翻訳するためのインスタンスを作成 10 g = async_google_trans_new.AsyncTranslator() 11 12 # "ja"に翻訳(つまり日本語。"ja" の後に翻訳したい言語を入れますが、ない場合は自動で判断してくれます。) 翻訳成功時の返り値は文字列です。 13 # このメッセージの内容はすべて英語である、と言い切れる場合はこの後に"en"を追加してみると確実性が上がります。 14 translated = await g.translate(message.content, "ja") 15 await message.channel.send(translated) 16

投稿2023/02/10 02:43

編集2023/02/12 07:12
pecop

総合スコア405

gx1285, Takumin👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takumin

2023/02/10 11:32 編集

ご回答本当にありがとうございます! やってみたところ、最初のエラーは解消した(大感謝)のですが、 RuntimeWarning: coroutine 'AsyncTranslator.translate' was never awaited await coro(*args, **kwargs) RuntimeWarning: Enable tracemalloc to get the object allocation traceback エラー?警告?が出てきます。。 色々調べてみましたがこれは何でしょう。。 何度もごめんなさい💦
pecop

2023/02/11 05:08

あ、すみません。 --- translated = g.translate(message.content, "ja") --- を --- translated = await g.translate(message.content, "ja") --- にしてください。(awaitを付け足す。)
Takumin

2023/02/11 10:26 編集

import discord import async_google_trans_new token = "0000" CHANNELID = 0000 intents = discord.Intents.all() intents.messages = True client = discord.Client(intents=intents) @client.event async def on_ready(): print("run") @client.event async def on_message(message): if message.author.bot: return g = async_google_trans_new.AsyncTranslator() translated = await g.translate(message.content, "ja") await message.channel.send(translated) client.run -------------------------------------------------------------------- 最終的にこのコードで成功しました!もう本当にうれしいです!!!(泣//// python初めて3日目ですが初めての作品(?)創作物(?)です! ほんとにpeco_2282さんには感謝してもしきれません。本当に本当にありがとうございました!!! これから頑張ってpython勉強していきたいと思います! 最高の日でした!!!!!!
pecop

2023/02/12 07:09 編集

お疲れ様です。 最初はつまずくことが多いですが、ドキュメントを読めるようになると一人でも書けるようになります。 頑張ってください。応援してます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.54%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。