GuildMember 缺少 .permissions 导致奇怪的错误 Discord.js

.permissions missing from GuildMember causing weird error Discord.js

我正在使用 Discord.js 和 TypeScript,当我尝试访问成员的权限时 运行 遇到了一些奇怪的错误。

export const Ban: Command = {
  name: "ban",
  description: "Ban a user from the server.",
  options: [
    { type: 6, name: "target", description: "The user to be banned." },
    { type: 3, name: "reason", description: "Reason for the ban." },
  ],
  type: "CHAT_INPUT",
  run: async (_client: Client, interaction: CommandInteraction) => {
    const guild = interaction.guild;
    if (!guild) {
      interaction.reply("This command must be used in a guild!");
      return;
    }
    const userMember = await guild.members.fetch(interaction.user);
    console.log(userMember);
  }
}

变量 userMember 显然具有类型 GuildMember 但是,在记录时,它缺少 .permissions 值。 如果我将最后一行更改为 console.log(userMember.permissions),TypeScript 不会报错,但我会在控制台中收到一个奇怪的错误:

TypeError: Cannot read properties of undefined (reading 'id')
    at GuildMemberRoleManager.get cache [as cache] (/<mypath>/node_modules/discord.js/src/managers/GuildMemberRoleManager.js:36:101)
    at GuildMember.get permissions [as permissions] (/<mypath>/node_modules/discord.js/src/structures/GuildMember.js:262:39)
    at Object.run (/<mypath>/src/commands/mod/ban.ts:33:28)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

错误似乎来自 Discord.js 本身。关于在这里做什么的任何想法?

const userMember = await guild.members.fetch(interaction.user);

fetch 选项是 snowflake 或 null,不是用户。 您可以阅读有关获取公会成员的信息 here 或者您只是通过交互访问使用斜杠命令的成员:

const userMember = interaction.member;