【发布时间】:2019-12-28 03:15:53
【问题描述】:
我正在开发一个不和谐的机器人,如果特定消息不存在,则应该在其中更新或创建它。如果消息已被具有访问权限的人删除,则会出现问题... 创建一个悬空引用,并在需要更新时引发异常。如何检测当前频道中是否不存在具有特定 ID 的消息?
这是当前代码:
TextChannel scoreChannel = channel.getGuild().getTextChannelsByName(gameType + "-ladder", true).get(0);
String id = ScoreboardController.getScoreboardMessageId(gameType);
if (id == null)
scoreChannel.sendMessage(eb.build()).queue();
else {
scoreChannel.editMessageById(id, eb.build()).queue(); // this part can fail
}
请注意,getScoreboardMessageId 从数据库中获取先前存储的 id。
要么我需要按标题查询消息,要么通过其他方式查找它是否丢失。
我尝试像这样检索嵌入的消息,但没有成功:
List<Message> messages = scoreChannel.getHistory().getRetrievedHistory();
After some more searching I managed to do this which works but is not Async:
TextChannel scoreChannel = channel.getGuild().getTextChannelsByName(gameType + "-ladder", true).get(0);
List<Message> messages = new MessageHistory(scoreChannel).retrievePast(10).complete();
boolean wasUpdated = false;
for (Message msg : messages) {
if (msg.getEmbeds().get(0).getTitle().equals(content[0])) {
scoreChannel.editMessageById(msg.getId(), eb.build()).queue();
wasUpdated = true;
}
}
if (!wasUpdated)
scoreChannel.sendMessage(eb.build()).queue();
【问题讨论】:
-
阅读queue的文档
标签: java discord-jda