【问题标题】:Check if a user changed his/her nick with GuildMemberUpdated检查用户是否使用 GuildMemberUpdated 更改了他/她的昵称
【发布时间】:2018-03-26 17:22:41
【问题描述】:

所以,在我的CommandHandler 中,我创建了这个:

//other CommandHandler stuff
_client.GuildMemberUpdated += UserNickChanged;
}

public async Task UserNickChanged(SocketGuildUser before, SocketGuildUser after)
{
    if (!before.Nickname.Equals(after.Nickname))
    {
        var channel = _client.GetChannel(123123123123) as SocketTextChannel;

        await channel.SendMessageAsync("User '" + before.Username + "' changed his/her nick to '" + after.Username + "' .");
    }
    else
    {
        return;
    }
}

我想要做的是检查用户是否更改了他的昵称,检查是否是更改的昵称,然后说用户“X”将他的昵称更改为“Y”。但是,谁能想到,这行不通。如果我删除if-clause,它会起作用,但即使这样before.Nickname 和after.Nickname 也是一样的。我感觉我用错了SocketGuildUser before, SocketGuildUser after。如果有人可以帮助我,我会很高兴。

【问题讨论】:

    标签: c# discord.net


    【解决方案1】:

    我自己对此进行了测试,除非您输入 after.Nickname.ToString(),否则 after 昵称似乎是相同的:

    if (!before.Nickname.Equals(after.Nickname.ToString()))
    

    不知道为什么会这样,可能是 API 的错误。

    【讨论】:

    • 嗯,谢谢,但我相信我想通了。因此before 有可能等于 null,您首先需要使用string nameBefore = (before.Nickname ?? before.Username); 进行检查。
    • 是的,但这并不能解决您的问题。 Username 不会得到昵称,因此整个操作毫无意义。
    • 但它可以工作,并且可以满足我的需求,所以我觉得很好。无论如何,谢谢你的帮助。
    猜你喜欢
    • 2011-03-24
    • 2021-06-26
    • 2017-05-05
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2019-08-21
    • 2021-02-16
    • 2017-08-04
    相关资源
    最近更新 更多