ค้นหาเว็บไซต์

typescript - วิธีตรวจสอบสิทธิ์จากการโต้ตอบใน discord.js


ฉันต้องการความช่วยเหลือในการเข้าใจวิธีเขียนสิ่งนี้ใน TypeScript ฉันลองทำใน 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"));
  },

Typescript มีข้อผิดพลาดที่ .has:

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 คุณจะเห็นว่า permissions เป็นประเภทสตริง ผมไม่ค่อยคุ้นเคยกับ TS แต่ผมคิดว่านี่เป็นวิธีแก้ปัญหา

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