我有一些代码可以使人们感到不和谐
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
也是它的权限
答案 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()
)