当用户输入命令'!stream‘时,我试图让我的不和谐的机器人为用户分配一个角色,特别是我对c#和discord.net的编程非常陌生。现在,我有了应该在消息接收方法中分配角色的代码。这可能不是最好的方法,但我不确定现在是否有更好的方法。总之,这是代码:
IGuildUser user = (IGuildUser)arg.Author;
IRole role = ((IGuildChannel)arg.Channel).Guild.GetRole(theRoleID);
if (arg.Content == "!stream") {
await (user as IGuildUser).AddRoleAsync(role);
}我确保了用户和角色都得到了正确的用户和正确的角色。它还运行if语句,因为我在其中有输出。唯一不起作用的是实际的任务。任何帮助都是非常感谢的。谢谢!
发布于 2018-09-05 07:28:13
如果代码端的所有内容都已正常工作,则可能会在不和谐服务器本身上出现权限问题。
我将用一个例子来解释:
一段时间前,当我尝试做一些对我的生活没有影响的适度命令时,也发生了类似的事情,尽管代码是正确的,没有错误。
问题原来是不和谐服务器上的角色层次结构:基本上,机器人指派的角色只能影响到他下面的角色,例如屏幕截图:

您会注意到,Inquisition角色就在Admin角色下面。
这是一个机器人,它需要在所有其他角色之上才能与这些用户进行交互,所以我建议你试着把你的机器人移到角色阶梯上,看看它是否能解决你的问题。
发布于 2018-09-04 18:21:29
嘿,Solonce,您添加角色的方式几乎是正确的,但是使用if的方法代替了您的方法,而是使用已经添加的方式向bot添加新命令。我假设!是您的前缀,而stream是您希望机器人读取并相应添加角色的命令/单词。如果你的案子不是我想的那就告诉我。
因此,理想的做法是这样做。
ModuleBase<SocketCommandContext>继承,因此它看起来像public class Matches : ModuleBase<SocketCommandContext>。[Command("stream")]为机器人设置任何命令。添加角色的方式有点像这样
[Command("stream")]
public async Task RoleTask()
{
ulong roleId = 486599202093269012;
var role = Context.Guild.GetRole(roleId);
await ((SocketGuildUser) Context.User).AddRoleAsync(role);
}在这种情况下,bot (如果有足够的权限)应该将roleId的角色授予发送命令的用户。ie !stream
另外,如果要开始工作,我建议您看看http://docs.stillu.cc的一些优秀文档,另一个好方法是查看示例,以便学习。这是我在起步的时候做的机器人。也许你可以学。
https://stackoverflow.com/questions/52153990
复制相似问题