如何在 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.js 中检查消息是不是为 DM?

.send() 上的 discord.js 缺少权限错误

如何添加一种方法来检查某人是不是已经在部落中/或者他们是不是是 Discord 中的部落所有者 - Discord.JS

如何检查消息是不是存在? (discord.js)

这个 discord.js 命令如何违反 if 语句?