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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:44:55