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

如何在discord.py中获取后续message.content以处理Quest事件?

问题分析

你的代码存在两个核心问题,导致无法识别后续的"Quest"消息:

  1. 使用time.sleep()会阻塞discord.py的异步事件循环,bot在休眠期间完全无法接收新消息。
  2. message.content始终指向触发当前代码块的初始消息(即包含"You can move forward."的那条),不会自动更新为后续出现的"Quest"消息。
解决方案

改用discord.py的wait_for()方法监听后续消息,同时用asyncio.sleep()替代time.sleep()(异步环境下的正确休眠方式),修改后的代码如下:

import asyncio

# 假设你的client是discord.Client()或commands.Bot()实例
@client.event
async def on_message(message):
    if "You can move forward." in message.content:
        await asyncio.sleep(3)
        await message.channel.send("!step")
        
        # 等待频道内出现包含"Quest"的消息,超时时间可根据实际情况调整
        try:
            # 过滤条件:消息来自同一频道且内容包含"Quest"
            quest_msg = await client.wait_for(
                "message",
                check=lambda m: m.channel == message.channel and "Quest" in m.content,
                timeout=10
            )
            # 收到Quest消息后执行solve指令
            await asyncio.sleep(2)
            await message.channel.send("!solve 12")
            await asyncio.sleep(5)
        except asyncio.TimeoutError:
            # 超时未收到Quest消息时的处理逻辑,可按需修改
            pass
        
        # 继续执行后续指令
        await message.channel.send("!turn right")
        await asyncio.sleep(3)
        await message.channel.send("!wall")
关键说明
  • wait_for()会异步等待指定事件(此处为新消息),通过check参数精准过滤符合要求的消息,不会阻塞整个bot的运行。
  • asyncio.sleep()是异步休眠方式,不会占用事件循环,bot在休眠期间仍能正常处理其他消息和事件。
  • timeout参数用于避免bot无限等待,超时后会触发TimeoutError,你可以根据需求调整超时时间或补充对应的处理逻辑。

内容的提问来源于stack exchange,提问作者timikk8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:50:22