部署在repl.it的discord.py机器人完全不回复消息 问题求助
问题排查与修复方案
以下是你代码中的具体问题和对应修复方法:
- on_message事件未注册装饰器:你定义的
on_message函数没有添加@client.event装饰器,discord.py不会将其识别为事件回调函数,收到消息时不会触发该函数逻辑。 - 字符串拼接类型错误:
message.author是Discord User类实例,不能直接和字符串拼接,会触发类型报错,需要调用str()转换或者使用mention属性艾特用户。 - 未启用消息内容意图:Discord v10及以上API要求机器人主动开启
message_content意图才能获取非指令、非艾特的普通消息内容,否则message.content会返回空字符串,无法匹配$buy前缀。你需要先前往Discord开发者后台的机器人设置页,开启「Message Content Intent」开关。 - 确认repl.it项目的Secrets(环境变量)中已正确添加键为
TOKEN的配置,值为你从Discord开发者平台拿到的机器人令牌。
修复后的完整代码如下:
import discord import os # 配置意图,开启消息内容读取权限 intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) # 补上事件装饰器 @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('$buy'): # 修正字符串拼接,使用mention艾特触发用户 await message.channel.send(f'What would you like to buy {message.author.mention}') client.run(os.getenv('TOKEN'))
内容的提问来源于stack exchange,提问作者B.S.S.SRIKAR
相关产品推荐
相关产品推荐

