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

如何使用discord.py移除消息的所有反应?并实现机器人发送消息10秒后自动清除其全部反应

解决Discord.py消息反应清除问题

嘿,我来帮你搞定这个需求!你的代码里有几个小细节需要修正,然后就能轻松实现10秒后清除消息反应的功能了,我一步步给你说:

首先修正代码里的两个小错误

  1. 消息判断错误:你写的if message == "test":不对,因为message是一个Discord的Message对象,不是纯文本字符串。要判断用户发送的文本内容,得用message.content属性。
  2. 阻塞式睡眠问题:time.sleep(10)会阻塞整个Discord机器人的事件循环,导致机器人在这10秒内完全无法响应任何其他操作(比如其他消息、指令)。我们需要用异步的asyncio.sleep(10)来代替,这样机器人在等待的同时还能正常工作。

完整实现代码

下面是修正后的完整代码,我已经把清除反应的逻辑加进去了:

import discord
import asyncio  # 必须导入这个库来使用异步睡眠
TOKEN = "my-discord-token"
client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    # 正确判断用户发送的文本内容
    if message.content == "test":
        # 发送消息并保存返回的Message对象(注意变量名,这不是ID,是消息对象)
        msg = await message.channel.send("Test")
        # 异步等待10秒,不阻塞机器人
        await asyncio.sleep(10)
        # 移除这条消息的所有反应,一步到位
        await msg.clear_reactions()

client.run(TOKEN)

关键代码解释

  • await asyncio.sleep(10):这是异步环境下的睡眠方法,和time.sleep不同,它不会让机器人卡住,在等待的10秒里机器人依然能处理其他事件。
  • await msg.clear_reactions():这是Discord.py专门提供的方法,直接移除目标消息上的所有反应,不需要手动遍历每个反应再删除,非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:53:11