Как проверить наличие разрешений от взаимодействия в discord.js

#typescript #discord.js

Вопрос:

Мне нужна помощь в понимании того, как написать это на машинописном языке. Я попробовал это в javascript, и это работает.
(возвращает значение true или false независимо от того, имеет ли пользователь, осуществивший взаимодействие, разрешение администратора)

 execute(client, interaction) {
    console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
  }
 

Моя попытка в машинописном виде:

 execute(client: MyClient, interaction: CommandInteraction) {
    console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
  },
 

В машинописном тексте есть ошибка. есть:

 Property 'has' does not exist on type 'string | Readonly<Permissions>'.
Property 'has' does not exist on type 'string'.
 

Как я могу это исправить?

Ответ №1:

Попробуйте кастинг 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, вы увидите, что права доступа-это строка типа. Я не очень знаком с TS, но я думаю, что это решение

 execute(client: MyClient, interaction: CommandInteraction) {
   const member = interaction.member as GuildMember
console.log(member?.permissions.has("ADMINISTRATOR"));
  }
 

Комментарии:

1. Я даже не знаю, правильный ли у меня синтаксис. Пожалуйста, исправьте это, если что-то не так.

2. Большое спасибо за ваш ответ! Он распознает .имеет сейчас! Но interaction.member также может быть нулевым, и теперь он выдает мне ошибку, что типы не совпадают, даже если есть»?». Type 'GuildMember | APIInteractionGuildMember | null' is not assignable to type 'GuildMember'. Type 'null' is not assignable to type 'GuildMember'.

3. Я также очень плохо знаком с машинописным текстом… Отсюда и имя пользователя

4. Ошибка возникает из const member: GuildMember -за того, что указано, что member может иметь только форму члена гильдии, однако interaction.member имеет 3 возможных типа и не может быть ограничено типом члена гильдии

5. Ваш ответ был моей идеей, я просто не знал, как это сделать в машинописном виде