命令更改用户的昵称Discord

时间:2017-03-14 05:48:49

标签: c# discord

我一直在尝试通过C#中的discord bot创建命令,允许人们更改其他用户的昵称,然后向管理员发送PM报告用户的昵称已更改以及谁负责更改名称。除了实际的昵称改变之外,一切正常。我试图用来完成这个的代码是

    userBeingChanged.Nickname = newName;

但它说我不能这样做,因为它是只读的。有没有人知道改变用户昵称的另一种方法?

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

感谢。

3 个答案:

答案 0 :(得分:1)

很可能看起来像这样。

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

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

我们正在为命令usernewname添加两个参数。 newname未解析的原因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.

用法:public Message append(String test) { astring += test; return this; } ,会让机器人说 Hello,这样可行。。当然,参数必须被解析,因为消息包含空格。如果您有任何疑问,请随时提出。

答案 1 :(得分:0)

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

请注意,这只允许您更改服务器上此人的昵称,而不是全球不和谐名称。

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

答案 2 :(得分:0)

这应该有效。

    [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);
        }
    }