【问题标题】:C# Discord.NET: Why this ban module prevents anybody from interacting with my bot?C# Discord.NET:为什么这个禁止模块会阻止任何人与我的机器人交互?
【发布时间】:2018-11-12 02:46:41
【问题描述】:

我正在使用 Discord.NET API 创建一个 Discord 机器人。一段时间以来,我一直在为我的机器人实施命令和模块,我正在尝试向我的机器人添加一个禁止命令。我做了这个命令,所以你必须有一个名为“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”,但我不认为这是问题所在。

【问题讨论】:

    标签: c# discord.net


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2012-08-13
      • 2021-04-14
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多