discord.net - 命令权限 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 中提供的命令服务,而不是 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
推荐阅读
- java - 查询不够深入?
- javascript - 从 setInterval 函数调用 handleSubmit 事件后获取空状态
- node.js - 在nodejs(googleapis)中获取access_token的未授权客户端错误
- sql - 从多个表中选择不同的字段
- go - 如何流式传输 PDF
- routes - 如何获取 Hanami 应用程序中使用的所有路线的列表?
- linux - 如何在由多个目录组成的多个目录/环境变量中grep?
- javascript - 如何映射枚举以选择 Storybook 中的下拉列表?
- c - 与-O3相比,gcc -Ofast的汇编代码中计算不精确的根源在哪里?
- sql - 在 SET 子句中带有子查询的 UPDATE 查询的执行顺序是什么?