如何添加多个反应以嵌入 Discord JDA

Posted

技术标签:

【中文标题】如何添加多个反应以嵌入 Discord JDA【英文标题】:How to add multiple reactions to embed Discord JDA 【发布时间】:2020-11-28 10:56:28 【问题描述】:

我正在使用 JDA 和以下代码发送不和谐嵌入:

event.getChannel().sendMessage(image.build()).queue();

我可以通过将代码更改为以下代码来添加对消息的单个反应:

event.getChannel().sendMessage(image.build()).complete().addReaction("✔").queue();

如何向此消息添加多个反应?

【问题讨论】:

【参考方案1】:

您可以多次使用complete()返回的Message对象。

所以,你可以一个接一个地发送反应:

Message msg=event.getChannel().sendMessage(image.build()).complete();
msg.addReaction("✔").queue();
msg.addReaction("+1").queue();

然而,这使用完成,并且会等到消息发送完毕。在此期间不执行任何侦听器。

这意味着您的机器人等待和其他命令(由其他用户)仅在消息发送后执行。

为了解决这个问题,您可以使用 .queue() 和 lambda:

event.getChannel().sendMessage(image.build()).queue(msg->
    msg.addReaction("✔").queue();
    msg.addReaction("+1").queue();
);

如果你想多次这样做,你可以为此编写一个方法:

public void sendMessageWithReactions(MessageChannel channel,MessageEmbed embed, String... reactions)
    channel.sendMessage(embed).queue(msg->
        for(String reaction:reactions)
            msg.addReaction(reaction).queue();
        
    );

你可以这样调用这个方法:sendMessageWithReactions(event.getChannel(),image.build(),"✔","+1");

【讨论】:

谢谢,我正在尝试实施您的任一解决方案,但遇到了问题。对于第一个解决方案,我得到一个无法解析符号“消息”,而对于第二个解决方案,第 5 级不支持 lambda 表达式。有什么想法吗? 我修复了 lambda 问题并让它正常工作,谢谢! 您需要导入Message。在你的类声明之前添加import net.dv8tion.jda.api.entities.Message;

以上是关于如何添加多个反应以嵌入 Discord JDA的主要内容,如果未能解决你的问题,请参考以下文章

Discord JS //尝试通过响应消息来添加角色和删除角色

(discord.py) 向不和谐机器人发布的嵌入添加反应

Discord JS - 如何对同一个嵌入做出多次反应?

Discord js - 如何在给定的时间段内继续对消息做出反应并编辑嵌入

Discord Bot - 反应收集器/嵌入编辑

使用 Discord.J 编辑嵌入字段