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

如何在pycord中实现点击后删除消息的特定表情反应?

解决PyCord/Discord.py中点击表情后删除用户反应的问题

完全可以实现用户点击特定表情后删除其对应的反应,你的代码存在几个关键问题,下面逐一修正:

代码问题分析

  • 缺少asyncio导入,使用asyncio.TimeoutError会触发报错
  • 表情符号用了占位符("SomeEmoji"、空字符串""),导致判断逻辑完全失效
  • reaction.delete()会删除所有用户对该表情的反应,而非点击者自己的反应,应该用reaction.remove(user)
  • wait_for仅监听一次反应,无法处理用户多次点击的场景(如果有需要)
  • 重复添加了同一个表情,应该替换为两个不同的目标表情

修正后的代码

import discord
import asyncio  # 新增必要导入
from discord.ext import commands

intents = discord.Intents.all()
intents.message_content = True  # 必须开启消息内容意图,否则无法读取用户消息

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    if message.content == 'test':
        reply_msg = await message.reply('Is this cool?')
        # 替换成你实际需要的表情,这里用👍和👎做示例
        like_emoji = "👍"
        dislike_emoji = "👎"
        await reply_msg.add_reaction(like_emoji)
        await reply_msg.add_reaction(dislike_emoji)

        def check(reaction, user):
            # 只监听消息作者的反应,且是指定表情,且反应在机器人的回复消息上
            return user == message.author and str(reaction.emoji) in [like_emoji, dislike_emoji] and reaction.message.id == reply_msg.id

        try:
            # 循环监听,支持用户多次点击表情直到超时
            while True:
                reaction, user = await bot.wait_for("reaction_add", check=check, timeout=30.0)
                # 删除当前点击者的该反应
                await reaction.remove(user)
                # 根据点击的表情回复对应内容
                if str(reaction.emoji) == like_emoji:
                    await message.reply('Like it.')
                else:
                    await message.reply("NO like")
        except asyncio.TimeoutError:
            await message.reply("Timeout bro.")

# 替换成你的机器人Token
bot.run("YOUR_BOT_TOKEN")

关键说明

  • 精准删除用户反应:reaction.remove(user)只会移除当前点击者的该表情反应,而reaction.delete()会删除这条消息上所有用户的该表情,务必区分使用
  • 自定义表情处理:如果用的是服务器自定义表情,需要用discord.PartialEmoji对象,格式为discord.PartialEmoji(name="表情名称", id=表情ID)
  • 单次/多次监听:如果只需要用户点击一次就结束,去掉while True循环即可
  • 权限配置:一定要在Discord开发者门户开启Message Content Intent,否则机器人无法读取用户发送的test消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:31:58