所以我创建了一个角色命令,但我该命令根据用户输入赋予角色。我现在没有太多工作,但这是我目前的工作。
Imports Discord
Imports Discord.Commands
Imports Discord.WebSocket
<Group("giverole")>
Public Class giverole
Inherits ModuleBase(Of ICommandContext)
' Private user = Context.User
' Private role As IRole
'<Remainder> ByVal r As String
'Dim author = Context.Message.Author
<Command("weebers")>
Private Async Function giveRole() As Task
'Await DirectCast(author, SocketGuildUser).AddRoleAsync(role)
'Await CType(Context.User, SocketGuildUser).AddRoleAsync(role)
'Dim role = Context.Guild.Roles.FirstOrDefault(Function(x) x.Name.ToString() = "WEEBERS")
'Await user.AddRoleAsync(role)
'Dim user = Context.User
'Dim role = Context.Guild.Roles.FirstOrDefault(Function(x) x.Name = "WEEBERS")
Dim roleid As ULong = 486599202093269012
Dim role = DirectCast(Context.Message.Channel, IGuildChannel).Guild.GetRole(roleid)
Await DirectCast(Context.User, SocketGuildUser).AddRoleAsync(role)
Await ReplyAsync(role.ToString)
End Function
End Class
即使可以编译,即使仅使用-giverole命令也无法赋予我角色。我昨晚做了这个工作,但是现在当我醒来时,它坏了,给了我一个对象没有被引用的错误。我设法以某种方式摆脱了该错误,但现在该角色将无法分配。现在,我真正想做的就是根据用户的输入为用户分配角色。如您所见,我的评论。我一直在尝试如何使它工作。
答案 0 :(得分:0)
首先,我建议使用SocketCommandContext
而不是ICommandContext
。
其次,我相信您的命令是公开的以便被发现。
就代码而言,如果使用SocketCommandContext
Inherits ModuleBase(Of SocketCommandContext)
<Command("weebers")>
Public Async Function giveRole() As Task
Dim roleid As ULong = 486599202093269012
Dim role = Context.Guild.GetRole(roleid)
Await DirectCast(Context.User, SocketGuildUser).AddRole(role)
Await ReplyAsync(role.Name)
End Function
此代码实际上将角色赋予执行命令的用户。不确定那是否是您想要的。
注意:您应该能够将用户和角色都作为参数传递给命令,因此从理论上讲,您可以给任何用户任何角色(对指定方案施加某些限制)
答案 1 :(得分:-1)
这应该对您有帮助,您只需添加检查开始发送哪个命令并根据以下角色分配角色
address_id