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

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


我已经尝试过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 Fired,Found Message和Emojis: []


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


守着星空守着你
浏览 93回答 1
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 emojisString 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 listList<String> merged = new ArrayList<>();merged.addAll(emojis);merged.addAll(customEmoji);// Sort based on index in message to preserve ordermerged.sort(Comparator.comparingInt(content::indexOf));for (String emoji : merged) {    message.addReaction(emoji).queue();}请注意,重复项将被忽略,因为反应无法重复。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java