如何在 discord.js 中检查交互权限
Posted
技术标签:
【中文标题】如何在 discord.js 中检查交互权限【英文标题】:How to check for permissions from interaction in discord.js 【发布时间】:2021-10-16 04:34:09 【问题描述】:我需要帮助来理解如何用打字稿写这个。 我在javascript中试过这个并且它有效。 (返回真或假进行交互的用户是否具有管理员权限)
execute(client, interaction)
console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
我在打字稿中的尝试:
execute(client: MyClient, interaction: CommandInteraction)
console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
,
Typescript 在 .has: 上有错误:
Property 'has' does not exist on type 'string | Readonly<Permissions>'.
Property 'has' does not exist on type 'string'.
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:试试casting interaction.member
作为GuildMember
// Namespace
import GuildMember from "discord.js";
execute(client: MyClient, interaction: CommandInteraction)
const member = interaction.member as GuildMember;
console.log(member.permissions.has("ADMINISTRATOR"));
,
【讨论】:
【参考方案2】:这是因为 CommandInteraction.member
是 ?GuildMember | ?APIGuildMember
。如果您单击APIGuildMember link,您将看到权限是字符串类型。我对 TS 不是很熟悉,但我认为这是一个解决方案
execute(client: MyClient, interaction: CommandInteraction)
const member = interaction.member as GuildMember
console.log(member?.permissions.has("ADMINISTRATOR"));
【讨论】:
我什至不知道我的语法是否正确。如有错误请修正。 非常感谢您的回答!它现在可以识别 .has!但是interaction.member 也可以为null,现在它给了我一个错误,即使有'?',类型也不匹配。Type 'GuildMember | APIInteractionGuildMember | null' is not assignable to type 'GuildMember'. Type 'null' is not assignable to type 'GuildMember'.
我对打字稿也很不熟悉......因此用户名
发生错误是因为const member: GuildMember
声明member
只能 具有GuildMember 的形状,但是interaction.member
有3 种可能的类型并且不能仅限于GuildMember 类型
你的回答是我的主意,我只是不知道如何在 TypeScript 中做到这一点以上是关于如何在 discord.js 中检查交互权限的主要内容,如果未能解决你的问题,请参考以下文章
具有用户权限、客户端权限和限制的 Discord.js 命令处理程序
如何添加一种方法来检查某人是不是已经在部落中/或者他们是不是是 Discord 中的部落所有者 - Discord.JS