C# Discord.NET:为什么此禁止模块阻止任何人与我的机器人交互?



我正在使用 Discord.NET API创建一个Discord机器人。我已经为我的机器人实现命令和模块一段时间了,我正在尝试向我的机器人添加禁止命令。我发出了命令,因此您必须具有一个名为"机器人管理员"的角色。这是我使用的代码,它似乎导致了问题:

public class Ban : ModuleBase<SocketCommandContext>
{
[Command("ban")]
[RequireBotPermission(GuildPermission.BanMembers)]
public async Task banUser([Remainder]SocketGuildUser usertobehammered, string banre)
{
var rUser = Context.User as SocketGuildUser;
var role = Context.Guild.Roles.FirstOrDefault(x => x.Name == "Bot Admin");
if (rUser.Roles.Contains(role))
{
await ReplyAsync($"User {usertobehammered.Mention} has been banned.");
await Context.Guild.AddBanAsync(usertobehammered, 0, banre);
}
else
{
await ReplyAsync(":no_entry_sign: You need the Bot Admin role to do that!");
}
}
}

我不知道为什么,但是当我像往常一样运行时,我的机器人将联机,但尝试运行任何命令将无济于事。删除类允许用户再次使用命令。

有人知道这里的问题是什么吗?

编辑:仍然不知道原因,但我确实有另一个命令使用变量"rUser"和"role",这里也使用,但我认为这不是问题所在。

自己想通了,其实很简单。我只需要交换SocketGuildUser和字符串,所以它看起来像这样:

[Command("ban")]
[RequireBotPermission(GuildPermission.BanMembers)]
public async Task banUser(string banre, [Remainder]SocketGuildUser usertobehammered)

而不是看起来像这样的原版:

[Command("ban")]
[RequireBotPermission(GuildPermission.BanMembers)]
public async Task banUser([Remainder]SocketGuildUser usertobehammered, string banre)

我认为问题在于我相信 Remainder 将第一个单词之后的任何内容放入下一个参数中,这将使 SocketGuildUser 被放入一个字符串中,而不使用类似"SocketGuildUser.mention"之类的东西显然会使机器人不响应命令。人们,请不要犯我犯的这个愚蠢的错误。:$

相关内容

  • 没有找到相关文章

最新更新