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

Discord.js 如何检测消息是否包含Emoji 用于投票机器人功能开发

Discord机器人Emoji开头检测实现方案

问题根因

你遇到的匹配失效问题是没有覆盖Discord生态内所有的Emoji呈现形式,你的用户输入的选项可能包含三类Emoji,需要同时匹配:

  • 原生Unicode Emoji:用户直接输入的可视化表情(如✅),无特殊前缀
  • Discord短码Emoji:形如:white_check_mark:的冒号包裹的短码
  • Discord自定义Emoji:静态格式为<:emoji名称:emoji数字ID>,动态GIF格式为<a:emoji名称:emoji数字ID>

核心实现逻辑

用组合正则直接匹配消息开头的有效Emoji,以下为Python(discord.py)示例:

import re

# 组合正则,同时匹配三类Emoji开头
EMOJI_REGEX = re.compile(
    r"^("
    r"<a?:\w+:\d+>|"  # 匹配自定义动/静态Emoji
    r":\w+:|"  # 匹配短码格式Emoji
    r"[\U0001F1E0-\U0001F1FF\U0001F300-\U0001F5FF\U0001F600-\U0001F64F\U0001F680-\U0001F6FF\U0001F700-\U0001F77F\U0001F780-\U0001F7FF\U0001F800-\U0001F8FF\U0001F900-\U0001F9FF\U0001FA00-\U0001FA6F\U0001FA70-\U0001FAFF\U00002702-\U000027B0\U000024C2-\U0001F251]"  # 匹配原生Unicode Emoji
    r")"
)

def get_start_emoji(message_content: str):
    # 先去除消息首尾空白字符再匹配
    match_result = EMOJI_REGEX.match(message_content.strip())
    if match_result:
        # 返回匹配到的Emoji内容,可直接用于添加反应
        return match_result.group(1)
    return None

适配注意事项

  • 如果你使用discord.js等其他语言的开发库,直接平移正则规则即可,规则跨语言通用
  • 匹配到的短码Emoji可以直接传给对应库的add_reaction方法,Discord官方库会自动完成短码到原生表情的转换
  • 自定义Emoji需要确保机器人在该Emoji归属的服务器内,否则无法添加反应,可以在调用添加反应的逻辑外层加异常捕获,避免无效Emoji导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:15:00