Командные разрешения Discord.net - PullRequest
0 голосов
/ 08 мая 2019

тип пользователя: «test», если у пользователя есть роль «vip», то появляется сообщение «you have permission»

else «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

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Прежде всего, для создания команд в целом, вы должны рассмотреть возможность использования Служба команд , которая предоставляется в 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
0 голосов
/ 08 мая 2019

простой трюк, если участник вашего vip может считаться не большим количеством участников, вы можете выбрать их идентификаторы, чтобы дать им разрешение.

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
...