如何检测会员在 JDA 中是否更改了其他会员的昵称?

时间:2021-03-30 08:58:44

标签: java discord-jda

我想做一个服务器日志功能,其中应该记录消息更改、角色和昵称更改等内容。

我所做的是:

@Override
    public void onGuildMemberUpdateNickname(@NotNull GuildMemberUpdateNicknameEvent event) {
        if(BotMain.getInstance().getSettings().serverLogChannel != -1) {
            TextChannel serverlog = event.getGuild().getTextChannelById(BotMain.getInstance().getSettings().serverLogChannel);
            boolean removed = event.getNewNickname() == null;
            boolean created = event.getOldNickname() == null;
            EmbedBuilder builder = new EmbedBuilder();
            if(removed) {
                builder.setColor(Color.RED);
                builder.setAuthor("Nickname entfernt", event.getEntity().getUser().getAvatarUrl(), event.getEntity().getUser().getAvatarUrl());
                builder.addField("Änderung", event.getOldNickname() + " \u279C " + event.getEntity().getUser().getName(), false);
                builder.addField("Betrifft", event.getEntity().getAsMention(), false);
                builder.addField("Geändert von", event.getMember().getAsMention(), false);
            } else if(created) {
                builder.setColor(Color.GREEN);
                builder.setAuthor("Nickname erstellt", event.getEntity().getUser().getAvatarUrl(), event.getEntity().getUser().getAvatarUrl());
                builder.addField("Änderung", event.getEntity().getUser().getName() + " \u279C " + event.getNewNickname(), false);
                builder.addField("Betrifft", event.getEntity().getAsMention(), false);
                builder.addField("Geändert von", event.getMember().getAsMention(), false);
            } else {
                builder.setColor(Color.YELLOW);
                builder.setAuthor("Nickname geändert", event.getEntity().getUser().getAvatarUrl(), event.getEntity().getUser().getAvatarUrl());
                builder.addField("Änderung", event.getOldNickname() + " \u279C " + event.getNewNickname(), false);
                builder.addField("Betrifft", event.getEntity().getAsMention(), false);
                builder.addField("Geändert von", event.getMember().getAsMention(), false);
            }
            serverlog.sendMessage(builder.build()).queue();
        }
    }

但这只会在会员更改昵称时触发,而不会在会员更改其他会员昵称时触发。

是否有可能检测到这一点?

1 个答案:

答案 0 :(得分:0)

你可以看看这个事件 GenericGuildMemberUpdateEvent (GenericGuildMemberUpdateEvent) 和以下方法:

  • getEntity()(获取受影响的实体,即您的情况下的成员)
  • getMember()(获取影响者,即更改名称的人,继承自 GenericGuildMemberEvent
  • getPropertyIdentifier()(获取属性名,可能是昵称什么的)
  • getNewValue() 和 getOldValue()(获取新旧昵称)

我现在无法验证这一点,请随时通知我。