首页 > 解决方案 > 如何在不和谐的 C# 中踢人

问题描述

我有一些代码旨在让人们陷入不和谐

 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

也不是权限

标签: c#discord

解决方案


您需要在命令参数[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()


推荐阅读