首页 文章

命令更改用户的昵称Discord

提问于
浏览
2

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

userBeingChanged.Nickname = newName;

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

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

谢谢 .

2 回答

  • 1

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

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

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

  • 0

    很可能看起来像这样 .

    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 未解析,因为它可以包含空格 .

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

    Remember, the user needs to be online if you are to change his nickname.

    我将举例说明 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. ,会让机器人说你好,这个工作..当然,参数必须被解析,因为消息包含空格 . 如果您有任何问题随时问 .

相关问题