首页 > 解决方案 > 命令权限 Discord.net

问题描述

用户类型:“test”,如果用户有角色“ vip”则显示消息“ you have permission

其他“ you dont have permission

我的代码:

  Public Async Function onMsg(message As SocketMessage) As Task

   If message.Source = MessageSource.Bot Then
   Else 
   If message.Content.Contains("test") Then

            Dim userName As SocketGuildUser
            Dim user = TryCast(message.Author, SocketGuildUser)
            Dim role = (TryCast(user, IGuildUser)).Guild.Roles.FirstOrDefault(Function(x) x.Name = "vip")

            If Not userName.Roles.Contains(role) Then

                Await message.Channel.SendMessageAsync("you have permission")
            Else
                Await message.Channel.SendMessageAsync("you dont have permission")
            End If


        End If

   End Function

标签: discord.net

解决方案


首先,为了创建一般命令,您应该考虑使用Discord.Net 中提供的命令服务,而不是 If/Else 检查您的消息接收事件处理程序。

您的代码中也存在错误。您声明了一个userName变量,但从未真正为它分配任何内容。然而你试图做userName.Roles

解决方案:

If message.Source = MessageSource.Bot Then
    Return
ElseIf message.Content.Contains("test") Then

    Dim user = TryCast(message.Author, SocketGuildUser)

    'If casting the user to a SocketGuildUser was not successful, then exit
    If user Is Nothing Then Return 'This can occur if a user message the bot via Direct Messages

    'Using "Any" returns true if a match is found, false otherwise
    If user.Roles.Any(Function(role) role.Name.Equals("VIP", StringComparison.OrdinalIgnoreCase)) Then
        Await message.Channel.SendMessageAsync("you have permission")
    Else
        Await message.Channel.SendMessageAsync("you dont have permission")
    End If
End If

推荐阅读