Discord.py的on_message事件可触发,但IF语句无响应问题
问题分析与修复方案
你的代码存在三个关键问题,导致roll指令无响应:
错误1:直接比较
Message对象与字符串message是discord.Message类的实例,不是纯文本字符串。直接用它和"roll"比较永远不成立,必须提取消息内容:message.content。错误2:返回字符串无法触发消息发送
on_message是事件处理函数,返回值不会被Discord客户端处理。要让机器人发送消息,必须调用异步方法await message.channel.send()。遗漏:未排除机器人自身消息
如果不添加判断,机器人会响应自己发送的消息,可能导致循环触发。
修正后的代码
import discord import random intents = discord.Intents.all() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_message(message): # 忽略机器人自己发送的消息,避免循环 if message.author == client.user: return print("worked") # 提取消息文本并去除首尾空白(处理用户输入时的空格) p_message = message.content.strip() if p_message == "roll": # 异步发送骰子结果到消息所在频道 await message.channel.send(str(random.randint(1, 6))) client.run('***') # 你的token
内容的提问来源于stack exchange,提问作者Jared Robertson
相关产品推荐
相关产品推荐

