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

如何使用discord.py提取消息普通表情并添加对应反应?

解决方案

1. 提取消息中的Unicode表情

推荐使用emoji第三方库识别并提取消息中的Unicode表情(包括🏳️‍⚧️这类组合式表情),该库在Replit环境中完全可用:

步骤1:安装emoji库

在Replit的Shell中执行以下命令:

pip install emoji

步骤2:提取表情

使用emoji.emoji_list()方法可直接从文本中提取所有Unicode表情,返回结果包含每个表情的位置和完整字符串:

import emoji

# 从消息内容中提取表情
emoji_items = emoji.emoji_list(message.content)
# 提取纯表情字符串列表
extracted_emojis = [item["emoji"] for item in emoji_items]

若不想依赖第三方库,可通过遍历字符并判断Unicode类别实现,但组合表情的处理会非常繁琐,因此不推荐。

2. 使用提取的表情添加消息反应

discord.py的add_reaction()方法直接支持传入Unicode表情字符串,无需额外转换。拿到提取后的表情字符串后,直接调用方法即可:

完整代码示例

import discord
import emoji

intents = discord.Intents.default()
intents.message_content = True  # 必须开启此意图以读取消息内容

client = discord.Client(intents=intents)

# 替换为你的目标频道ID
TARGET_CHANNEL_ID = 123456789012345678

@client.event
async def on_message(message):
    # 忽略机器人自身发送的消息
    if message.author == client.user:
        return
    
    # 仅处理指定频道的消息
    if message.channel.id != TARGET_CHANNEL_ID:
        return
    
    # 提取所有Unicode表情
    emoji_items = emoji.emoji_list(message.content)
    extracted_emojis = [item["emoji"] for item in emoji_items]
    
    # 逐个添加反应
    for emo in extracted_emojis:
        try:
            await message.add_reaction(emo)
        except discord.HTTPException:
            print(f"无法添加表情 {emo}:可能是权限不足或表情无效")

# 替换为你的机器人Token
client.run("YOUR_BOT_TOKEN")

关键说明

  • 组合式表情(如🏳️‍⚧️)会被emoji库识别为完整字符串,直接传入add_reaction()即可正常显示。
  • 若添加失败,通常是机器人缺少消息管理权限,或表情本身存在异常(Unicode表情无服务器限制)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:05:18