简体   繁体   English

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

[英]How can I detect if a member changed the nickname of a other member in JDA?

I want to make a Server Log feature, where stuff like messages changes, roles and nickname changes should be logged.我想创建一个服务器日志功能,其中应该记录消息更改、角色和昵称更改等内容。

What I had done yet was this:我所做的是:

@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();
        }
    }

But that's only triggered when a member changes his nickname, but not if a member changes the nickname of a other member.但这仅在成员更改其昵称时触发,而不是在成员更改其他成员的昵称时触发。

Is there a possibility to detect this ?有没有可能检测到这一点?

You can take a look at this event GenericGuildMemberUpdateEvent ( GenericGuildMemberUpdateEvent ) and the following methods :你可以看看这个事件 GenericGuildMemberUpdateEvent( GenericGuildMemberUpdateEvent ) 和以下方法:

  • getEntity() (to get the affected entity, the Member in your case) getEntity()(获取受影响的实体,即您的情况下的成员)
  • getMember() (to get the affector, the guy who changed the name, herited from GenericGuildMemberEvent ) getMember() (获取影响者,即更改名称的人,继承自GenericGuildMemberEvent
  • getPropertyIdentifier() (to get the property name, might be nickname or something) getPropertyIdentifier()(获取属性名,可能是昵称什么的)
  • getNewValue() and getOldValue() (to get the old and new nickname) getNewValue() 和 getOldValue()(获取新旧昵称)

I cannot verify this right now, keep me informed.我现在无法验证这一点,请随时通知我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM