如何从消息中获取表情符号?

Posted

技术标签:

【中文标题】如何从消息中获取表情符号?【英文标题】:How to get emojis from a message? 【发布时间】:2020-02-09 10:18:48 【问题描述】:

我正在创建一个不和谐机器人,它将获取消息中的任何表情符号,然后用这些表情符号对该消息做出反应。

event.getMessage().getEmotes()event.getMessage().getEmotesBag() 我都试过了。但是,两者都返回一个空列表/包。

这是我当前的代码:

@Override
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) 
    
        System.out.println("Event Fired");
        if(event.getMessage().getChannel() == event.getGuild().getTextChannelById("632303757929086998"))
        
            System.out.println("Found Message");
            System.out.println("Emojis: " + event.getMessage().getEmotes());
            for(Emote emote : event.getMessage().getEmotes())
            
                System.out.println("Found emote" + emote);
                event.getMessage().addReaction(emote).queue();
            
        
    

此输出:Event FiredFound MessageEmojis: []

我期望/希望它输出消息中的所有表情符号并将它们添加为对消息的反应。

【问题讨论】:

【参考方案1】:

正如文档所述,Emote 仅适用于服务器的自定义表情符号。要检索表情符号,您必须使用一个表情符号库,该库可以从字符串中查找和过滤掉表情符号。

您可以为此使用emoji-java(在我的fork 中更新):

String content = message.getContentRaw();
List<String> emojis = EmojiParser.extractEmojis(content);
for (String emoji : emojis) 
    message.addReaction(emoji).queue();

要将其与自定义表情结合起来,您可以使用表情的提及格式和 unicode 来查找每个索引并为您的列表排序。

// Collect emojis
String content = message.getContentRaw();
List<String> emojis = EmojiParser.extractEmojis(content);
List<String> customEmoji = message.getEmotes().stream()
        .map((emote) -> emote.getName() + ":" + emote.getId())
        .collect(Collectors.toList());

// Create merged list
List<String> merged = new ArrayList<>();
merged.addAll(emojis);
merged.addAll(customEmoji);

// Sort based on index in message to preserve order
merged.sort(Comparator.comparingInt(content::indexOf));

for (String emoji : merged) 
    message.addReaction(emoji).queue();

请注意,此操作会忽略重复项,因为无法复制反应。

【讨论】:

好的,我试过了,但它似乎不像[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception java.lang.NoClassDefFoundError: org/json/JSONArray所说的那样工作 这完全不相关,您缺少 JDA 的依赖项。查看 wiki 中的设置指南或在支持服务器上询问。 @TurtyWurty - ***.com/questions/6792197/…

以上是关于如何从消息中获取表情符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 discord.js 中获取消息中某个表情符号反应的计数

如何让不和谐机器人使用 discord.py 向消息添加表情符号反应?

单词列表python不和谐中的表情符号

如何禁用 iOS 8 表情符号键盘?

如何使用 Telegram Bot API 发送表情符号?

如何使用 javascript 检测表情符号