Discord翻译机器人无法响应@提及,调试无效求助
Discord翻译机器人不响应@提及的排查与修复
问题概述
开发的Discord翻译机器人完全无法响应@提及操作,已尝试调整开发者设置、重写代码但无效。机器人预期逻辑:用户以@BotName 目标翻译语言格式回复待翻译消息,输出翻译结果。
核心问题与修复方案
1. 消息内容权限未开启
Discord的message_content意图默认关闭,机器人无法读取消息内容,自然无法识别@提及。
- 修复:
- 前往Discord开发者平台,进入机器人的Privileged Gateway Intents,开启
Message Content Intent - 代码中添加该意图:
intents = discord.Intents.default() intents.members = True intents.message_content = True # 新增这行 - 前往Discord开发者平台,进入机器人的Privileged Gateway Intents,开启
2. @提及的判断逻辑错误
代码中用startswith('@ИмяБота')判断,但Discord中@机器人的消息实际格式是<@机器人ID>或<@!机器人ID>,不是纯文本的@用户名。
- 修复:用机器人的用户对象来判断是否被提及:
@client.event async def on_message(message): if message.author == client.user: return # 检查是否被@提及 if client.user in message.mentions: # 提取@之后的内容 content_parts = message.content.split(maxsplit=2) # 确保格式正确:@Bot 语言 文本 if len(content_parts) < 3: await message.channel.send("格式错误,请使用:@BotName 目标语言 要翻译的文本") return lang = content_parts[1] text = content_parts[2] try: translated_text = translator.translate(text, dest=lang).text await message.channel.send(translated_text) except Exception as e: await message.channel.send(f'翻译出错:{str(e)}')
3. Token的语法错误
代码中client.run('BOT'S TOKEN')存在单引号嵌套问题,会导致语法错误。
- 修复:改用双引号包裹token:
client.run("你的机器人Token")
4. googletrans版本兼容性问题
新版googletrans(4.x+)存在API调用问题,建议使用稳定版:
- 修复:安装指定版本
pip install googletrans==4.0.0-rc1
完整修复后代码
import discord from googletrans import Translator intents = discord.Intents.default() intents.members = True intents.message_content = True # 开启消息内容权限 client = discord.Client(intents=intents) translator = Translator() @client.event async def on_ready(): print('已登录为 {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return # 检查是否被@提及 if client.user in message.mentions: content_parts = message.content.split(maxsplit=2) if len(content_parts) < 3: await message.channel.send("格式错误,请使用:@BotName 目标语言 要翻译的文本") return lang = content_parts[1] text = content_parts[2] try: translated_text = translator.translate(text, dest=lang).text await message.channel.send(translated_text) except Exception as e: await message.channel.send(f'翻译出错:{str(e)}') client.run("你的机器人Token")
内容的提问来源于stack exchange,提问作者Palma_Clown
相关产品推荐
相关产品推荐

