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

标签 java discord-jda

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

我尝试了 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: []

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

最佳答案

正如文档提到的,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();
}

请注意,重复项将被忽略,因为 react 无法重复。

关于java - 如何从消息中获取表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58348847/

相关文章:

java - 使用java api与USB驱动器交互

java - 动画延迟android

java - 在Java中,如何比较两个对象并返回Map或Xml、Json的属性,这两个对象有什么区别?

java - 具有 ADMINISTRATOR 权限的 Discord 机器人缺乏 MANAGE_CHANNEL 权限

java - 如何根据 react 发送消息,然后根据用户消息发送另一条消息?使用JDA

java - 如何使用 "sendMessage()"代码发送 double ?

Java 7 小程序自签名证书

java - 如何使用 JDA 添加多个 react 来嵌入消息

java - dv8tion 不和谐 java channel 权限

java - 从 SQLite 从游标读取数据时发生致命异常