c# - C# Discord.NET:为什么这个禁止模块会阻止任何人与我的机器人交互?
问题描述
我正在使用 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”,但我不认为这是问题所在。
解决方案
自己想通了,其实很简单。我只需要交换 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”之类的东西显然会使机器人没有响应到命令。人们,请不要犯我犯的这个愚蠢的错误。:$
推荐阅读
- postgresql - 将 struct 内的接口映射到 postgres db 列数据类型
- fail2ban - Fail2ban 设置失败正则表达式
- python - DAG 文件中的气流变量用法
- javascript - Vuex 商店中的 Vue 异步调用 REST API
- laravel - 检查交易中所有订单的状态并将交易标记为已完成
- javascript - 如何将对象列表转换为 FormData
- python - 为什么使用 Python 的 Selenium webdriver 无法访问网站
- javascript - filtering item that has nested objects based on condition and returning the item
- graphql - 订阅收听但未获取数据
- python - 如何在字符串中插入一个单词?