【发布时间】:2021-07-06 03:17:50
【问题描述】:
我正在尝试使用 Discord JDA API 发送消息,但是每当我发送消息时,它都会无限发送。
JDA 版本:4.2.1_255
我的尝试:
研究问题 使用 GuildMessageReceivedEvent 而不是 MessageReceivedEvent
伪代码:
Guild server = e.getGuild();
Role role = server.getRolesByName("Java", false).get(0);
System.out.println(role);
for(Member members : server.getMembers()) {
if(members.getRoles().contains(role)) {
sendPrivateMessage(members.getUser(), "Hello <@!" + members.getId() + ">"); // Sends infinitely
}
}
sendPrivateMessage():
public void sendPrivateMessage(User user, String content) {
user.openPrivateChannel()
.flatMap(channel -> channel.sendMessage(content))
.queue();
}
【问题讨论】:
-
代码对我来说很好,我们可以看看函数
sendPrivateMessage(user, message)吗? -
public void sendPrivateMessage(User user, String content) { user.openPrivateChannel() .flatMap(channel -> channel.sendMessage(content)) .queue(); } -
所以如果我是正确的,代码在函数
MessageReceivedEvent()?如果是这样,这意味着每当您的机器人所在的 gulild 中有 any 消息时,无论是哪个文本频道,它都会向每个具有特定角色的人发送 DM。这是你想要的吗?另外:请考虑编辑您的帖子并将函数sendPrivateMessage(user, message)的代码放在那里,这样会更容易阅读。 -
您可以使用
members.getAsMention()而不是<@!" + members.getId() + ">",让JDA 为您处理。因此,即使将来发生变化,您也不必担心。
标签: java discord-jda