Discord Bot仅被提及才响应含'congrats'消息的问题求助
问题描述
我是编程新手,编写了一个Discord Bot,需求是当收到包含'congrats'的消息时自动回复。但目前Bot仅在被@提及的情况下才会响应(如发送'congrats @bot'会收到回复),单独发送'congrats'则无反应。添加打印语句调试后发现,Bot未被提及的情况下,打印内容为'Message received: ',已排除权限问题。
原代码
import discord intents = discord.Intents.default() intents.members = True intents.guild_messages = True intents.reactions = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('Message received:', message.content) @client.event async def on_message(message): print('Message received:', message.content) if message.author == client.user: print(f"Message content: {message.content}") return if "congrats" in message.content.lower(): await message.channel.send("Jinx!) print(message.channel) client.run('TOKEN')
问题分析与解决方案
你的Bot出现这个问题主要有三个原因,逐一修复即可:
on_ready事件存在语法错误on_ready事件触发时不存在message变量,原代码里的print('Message received:', message.content)会直接抛出NameError,导致Bot启动后无法正常运行,无法监听所有消息。需要把这行改为Bot就绪的提示语句。缺少
message_contentIntent权限
Discord默认关闭了message_contentIntent,未开启该权限时,Bot无法读取未被@提及的消息内容,所以打印出的消息内容为空。需要在代码中添加intents.message_content = True,同时要去Discord开发者门户的Bot页面,找到"Privileged Gateway Intents"板块,开启"Message Content Intent"。消息发送语句存在语法错误
await message.channel.send("Jinx!)缺少闭合的双引号,会导致触发条件时抛出语法错误,无法正常发送回复。需要补上引号改为await message.channel.send("Jinx!")。
修正后的完整代码
import discord intents = discord.Intents.default() intents.members = True intents.guild_messages = True intents.reactions = True intents.message_content = True # 启用消息内容读取权限 client = discord.Client(intents=intents) @client.event async def on_ready(): print(f'Bot已登录,当前用户名:{client.user}') # 修正on_ready事件的错误 @client.event async def on_message(message): print('Message received:', message.content) if message.author == client.user: print(f"Message content: {message.content}") return if "congrats" in message.content.lower(): await message.channel.send("Jinx!") # 修复引号闭合问题 print(message.channel) client.run('你的TOKEN')
内容的提问来源于stack exchange,提问作者F Hh

