Discord.Net根据用户输入赋予角色

时间:2020-07-06 17:20:04

标签: vb.net discord discord.net

所以我创建了一个角色命令,但我该命令根据用户输入赋予角色。我现在没有太多工作,但这是我目前的工作。

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命令也无法赋予我角色。我昨晚做了这个工作,但是现在当我醒来时,它坏了,给了我一个对象没有被引用的错误。我设法以某种方式摆脱了该错误,但现在该角色将无法分配。现在,我真正想做的就是根据用户的输入为用户分配角色。如您所见,我的评论。我一直在尝试如何使它工作。

2 个答案:

答案 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