首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.NET分配角色

Discord.NET分配角色
EN

Stack Overflow用户
提问于 2018-09-03 17:15:22
回答 2查看 3.9K关注 0票数 0

当用户输入命令'!stream‘时,我试图让我的不和谐的机器人为用户分配一个角色,特别是我对c#和discord.net的编程非常陌生。现在,我有了应该在消息接收方法中分配角色的代码。这可能不是最好的方法,但我不确定现在是否有更好的方法。总之,这是代码:

代码语言:javascript
复制
IGuildUser user = (IGuildUser)arg.Author;
IRole role = ((IGuildChannel)arg.Channel).Guild.GetRole(theRoleID);
if (arg.Content == "!stream") {
    await (user as IGuildUser).AddRoleAsync(role);
}

我确保了用户和角色都得到了正确的用户和正确的角色。它还运行if语句,因为我在其中有输出。唯一不起作用的是实际的任务。任何帮助都是非常感谢的。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-09-05 07:28:13

如果代码端的所有内容都已正常工作,则可能会在不和谐服务器本身上出现权限问题。

我将用一个例子来解释:

一段时间前,当我尝试做一些对我的生活没有影响的适度命令时,也发生了类似的事情,尽管代码是正确的,没有错误。

问题原来是不和谐服务器上的角色层次结构:基本上,机器人指派的角色只能影响到他下面的角色,例如屏幕截图:

您会注意到,Inquisition角色就在Admin角色下面。

这是一个机器人,它需要在所有其他角色之上才能与这些用户进行交互,所以我建议你试着把你的机器人移到角色阶梯上,看看它是否能解决你的问题。

票数 5
EN

Stack Overflow用户

发布于 2018-09-04 18:21:29

嘿,Solonce,您添加角色的方式几乎是正确的,但是使用if的方法代替了您的方法,而是使用已经添加的方式向bot添加新命令。我假设!是您的前缀,而stream是您希望机器人读取并相应添加角色的命令/单词。如果你的案子不是我想的那就告诉我。

因此,理想的做法是这样做。

  1. 创建一个公共类并使其从ModuleBase<SocketCommandContext>继承,因此它看起来像public class Matches : ModuleBase<SocketCommandContext>
  2. 一旦完成,您就可以使用[Command("stream")]为机器人设置任何命令。

添加角色的方式有点像这样

代码语言:javascript
复制
[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的一些优秀文档,另一个好方法是查看示例,以便学习。是我在起步的时候做的机器人。也许你可以学。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52153990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档