You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord翻译机器人无法响应@提及,调试无效求助

Discord翻译机器人不响应@提及的排查与修复

问题概述

开发的Discord翻译机器人完全无法响应@提及操作,已尝试调整开发者设置、重写代码但无效。机器人预期逻辑:用户以@BotName 目标翻译语言格式回复待翻译消息,输出翻译结果。

核心问题与修复方案

1. 消息内容权限未开启

Discord的message_content意图默认关闭,机器人无法读取消息内容,自然无法识别@提及。

  • 修复:
    1. 前往Discord开发者平台,进入机器人的Privileged Gateway Intents,开启Message Content Intent
    2. 代码中添加该意图:
    intents = discord.Intents.default()
    intents.members = True
    intents.message_content = True  # 新增这行
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:05:26