更改用户昵称的命令 Discord

Posted

技术标签:

【中文标题】更改用户昵称的命令 Discord【英文标题】:Command to change user's nickname Discord 【发布时间】:2017-08-04 08:27:12 【问题描述】:

我一直在尝试通过 C# 中的不和谐机器人创建一个命令,该命令允许人们更改另一个用户的昵称,然后向管理员发送一个 PM,报告该用户的昵称已更改以及谁负责更改名称。除了实际昵称更改外,一切正常。我尝试用来完成此操作的代码是

    userBeingChanged.Nickname = newName;

但它说我不能这样做,因为它是只读的。有谁知道更改用户昵称的替代方法?

编辑:我只是想更改昵称而不是用户名,并且有问题的机器人确实具有管理员权限。上面的代码无法编译,我在问是否有另一种方法。

谢谢。

【问题讨论】:

真的可以改别人的昵称吗?我认为这将是一个重大疏忽。 一旦你完成你的代码,如果你改变我妻子的昵称,我会很高兴,我会私下给你发新的。 再做一个get;set;财产?如果这是必须只读的。 您将如何使用 Discord API 实现这一目标? @l'L'l 只要机器人具有管理昵称或管理员权限。 【参考方案1】:

机器人应该需要“管理昵称”权限或“管理员”权限才能更改服务器上某人的昵称。

请记住,这只允许您更改服务器上人员的昵称,而不是他们的全局不和谐名称。

问题可能源于那里,因为机器人试图做一些不允许做的事情。

【讨论】:

不是权限问题,上面的代码没有编译,因为nickname属性是只读的,不知道还有没有set name属性。有问题的机器人在我使用它的服务器上具有管理员权限。【参考方案2】:

看起来应该是这样的。

await userBeingChanged.Edit(nickname: newName).ConfigureAwait(false);

不确定您使用的是哪个版本,但这是一个示例。

cmd.CreateCommand("setnick")
            .Description("Changes, or sets, the nickname of the specified user.")
            .Parameter("user")
            .Parameter("newname", ParameterType.Unparsed)
            .Do(async (e) =>
        
            var user = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault();
            string newname = e.GetArg("newname");
            await user.Edit(nickname: newname).ConfigureAwait(false);
        );

我为你写了这个,但我希望你能理解它是如何工作的,如果你再写一个具有类似功能的命令。

我们在命令中添加了两个参数,usernewnamenewname 未解析,而 user 未解析的原因是因为在 user 中您可以提及用户,或以纯文本形式写入。但是,user 不能包含空格,因此您最好的选择是提及包含空格的用户,或者复制粘贴他当前的显示名称。 newname 未解析,因为它可以包含空格。

一个命令中不能有两个未解析的参数,因为无论消息的长度如何,只有第一个参数会被赋予一个值,它将无法访问。

请记住,如果您要更改他的昵称,用户需要在线。

我将举一个例子说明e.GetArg() 的工作原理。编写一个简单的命令,让机器人说出你告诉它的任何内容。

cmd.CreateCommand("say")
            .Parameter("msg", ParameterType.Unparsed)
            .Do(async (e) =>
        
            string message = e.GetArg("msg");
            await e.Channel.SendMessage(message);
        );

用法:!say Hello, this works.,会让机器人说 你好,这行得通。。当然,参数必须是未解析的,因为消息包含空格。如果您有任何问题,请随时提出。

【讨论】:

【参考方案3】:

这应该可行。

    [Command("nick")]
    [Description("Change a user's nickname")]
    public async Task NicknameSet(CommandContext ctx, [Description("Nickname to change")] DiscordMember user, [Description("New name")] string nickname)
    
        DiscordMember discordMember = user;
        var oldNick = discordMember.Nickname;
        await ctx.TriggerTypingAsync();
        try
        
            await discordMember.ModifyAsync(x => x.Nickname = nickname);
            var newNick = discordMember.Nickname;
            await ctx.Channel.SendMessageAsync($"ctx.Member.Username changed oldNick's nickname to: newNick.").ConfigureAwait(false);
            newNick = "";

        
        catch (Exception e)
        
            await ctx.Channel.SendMessageAsync
                ($"An error occured: e").ConfigureAwait(false);
        
    

【讨论】:

以上是关于更改用户昵称的命令 Discord的主要内容,如果未能解决你的问题,请参考以下文章

如何通过命令更改昵称?

如何更改昵称(discord.py)

更改用户昵称(discord.js)[重复]

在 discord.js 中更改关注者的昵称

使用昵称或用户 ID 在 Buddypress 中更改用户配置文件 URL

如何更改 Discord 机器人昵称?