【问题标题】:How can I detect if a member changed the nickname of a other member in JDA?如何检测成员是否更改了 JDA 中其他成员的昵称?
【发布时间】:2021-06-26 06:48:16
【问题描述】:

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

我所做的是:

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

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

有没有可能检测到这一点?

【问题讨论】:

    标签: java discord-jda


    【解决方案1】:

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

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

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

    【讨论】:

    • 这就像onGuildMemberUpdateNickname 只是在你更改自己的昵称时被解雇
    • 没看懂,抱歉
    猜你喜欢
    • 2022-01-23
    • 2021-03-13
    • 2020-09-15
    • 2021-05-06
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多