更改用户昵称的命令 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);
);
我为你写了这个,但我希望你能理解它是如何工作的,如果你再写一个具有类似功能的命令。
我们在命令中添加了两个参数,user
和 newname
。 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.
,会让机器人说 你好,这行得通。。当然,参数必须是未解析的,因为消息包含空格。如果您有任何问题,请随时提出。
【讨论】:
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章