NodeJS 获取公会冲突中用户拥有读/写权限的所有通道,js

p8h8hvxi  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(111)

我试图写一个函数,它可以接收一个不和谐的用户ID,并返回一个通道列表,他们有发送/读取消息(或者,不重要)权限。
我想不出来,甚至不确定这是否可能。我在网上看到的所有东西都检查什么角色有权限或者什么用户有角色等,但是我只需要得到一个用户有这些权限的频道列表。
我也不需要使用不和谐。js库,plain discord API也可以工作。
下面是我试过的代码

Client.once('ready', async () => {
  const guild = await Client.guilds.fetch(GUILD_ID);
  const channel = await guild.channels.fetch(USER_NO_ACCESS_CHANNEL_ID);
  if (!channel || !channel.isTextBased() || !(channel instanceof TextChannel)) {
    throw new Error("No channel found");
  }
  const member = await guild.members.fetch(STEEL_USER_ID);
  console.log(channel.permissionsFor(member).has(PermissionsBitField.Flags.SendMessages));
  // Logs `true` even when the member has no access to the given channel
});

谢谢

mcdcgff0

mcdcgff01#

const guild = null; // Replace with whatever guild object you want.
const member = null; // Replace with whatever member object you want.
let channels = guild.channels.cache.filter(c => c.type == ChannelType.GuildText);


channels = channels.filter((channel) => {
  if (channel.permissionsFor(member).has(PermissionsBitField.Flags.ViewChannel)) return true;
  return false;
})

上面的代码片段将获取公会频道缓存的集合,然后它将过滤所有内容,只返回成员可以查看的条目(频道)。
然后,您可以任意使用该集合,也可以使用。for Each.

相关问题