命令权限discord.net



用户类型:"测试",如果用户有角色" 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

首先,对于创建命令,您应该考虑使用命令服务 cousd.net中提供的,而不是if/else nif/else ock in yours sagess收到的活动处理程序。

您的代码也有错误。您声明一个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

一个简单的技巧,如果您的VIP的成员可以算作不多的成员可以选择它们的ID来让他们许可。

If message.Content.Contains("test") Then
If message.Author.Mention = "<@!ID>" Then  'vip's permission |OrElse statement
Await message.Channel.SendMessageAsync("you have permission")
Else
Await message.Channel.SendMessageAsync("you dont have permission")
End If

相关内容

  • 没有找到相关文章

最新更新