如何在不和谐的C#中踢人

时间:2019-03-17 06:56:23

标签: c# visual-studio discord

我有一些代码可以使人们感到不和谐

 namespace bot.Core.Commands
 {
    public class Kick : ModuleBase<SocketCommandContext>
    {
        [Command("kick"), Summary("")]
        public async Task kick(IGuildUser User, string reason = "no reason")
        {
            User.KickAsync(reason);
        }
    }
 }

            int argpos = 0;
        if (!(Message.HasStringPrefix("$", ref argpos) || Message.HasMentionPrefix(Client.CurrentUser, ref argpos))) return;

        var result = await Commandss.ExecuteAsync(context, argpos);
        if(!result.IsSuccess)
        {
            await context.Channel.SendMessageAsync("Command not found or has failed, Commands can also only be ran by an administrator");
        }

无论总是抛出未找到或失败的命令,命令也只能由管理员运行。有人能解释为什么吗? 除此命令外,其他所有命令均能正常工作。预先感谢

我在c#vs 2017上使用Windows

也是它的权限

1 个答案:

答案 0 :(得分:2)

您需要在命令参数中的[Remainder]声明之前添加reason

 namespace bot.Core.Commands
 {
    public class Kick : ModuleBase<SocketCommandContext>
    {
        [Command("kick"), Summary("Kicks a user from the guild.")]
        public async Task KickCommand(IGuildUser user, [Remainder] string reason = "no reason")
        {
            user.KickAsync(reason);
        }
    }
 }

否则,在命令中,例如:

"$kick @Username Sending NSFW Pics"

“发送”之后的所有内容都将被视为额外参数,而不是reason的一部分,因此该命令将失败,因为它仅接受两个参数。添加[Remainder]可使命令查看此后作为同一参数的一部分键入的所有内容。

也就是说,如果您不指定原因,该命令应该可以使用。这是真的?而且您是否尝试过不记录原因就踢? (仅user.KickAsync()