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

时间:2018-06-01 23:49:53

标签: c# discord.net

我正在使用Discord.NET API创建Discord bot。我一直在为我的机器人实现命令和模块一段时间,我正在尝试向我的机器人添加一个禁止命令。我做了命令,所以你必须有一个名为“Bot Admin”的角色。这是我正在使用的代码似乎导致了问题:

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”的命令,这些也在这里使用,但我不相信这是问题。< / p>

1 个答案:

答案 0 :(得分:0)

自己想出来,实际上非常简单。我只需要交换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”这样的东西显然会使机器人不响应命令。人们,请不要犯这个愚蠢的错误。 :$