检查机器人是否有特定频道的权限discord.js v14

问题描述 投票:0回答:3

我试图弄清楚如何检查我的机器人在某个频道中是否有正确的 ViewChannel 和 SendMessages。我尝试了带有

if(!interaction.guild.me.permissionsIn(channel).has("VIEW_CHANNEL))
的discord.js v13 变体。然后将其升级到discord.js v14。
if(!interaction. guild.members.me.permissionsIn(channel).has([PermissionsFlagsBits.ViewChannel, PermissionsFlagsBits.SendMessages]))

但是我一直遇到同样的错误:

TypeError: Cannot read properties of undefined (reading 'id') at GuildMemberRoleManager.get cache [as cache] (C:\Users\sdamz\OneDrive\Desktop\dcbot v2\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:37:101) ...

已经用了

if(!interaction.guild.members.me.permissions.has([PermissionsFlagsBits.ViewChannel, PermissionsFlagsBits.SendMessagesl])

但遇到了同样的错误。

我将不胜感激!

javascript node.js discord discord.js
3个回答
1
投票

您需要

Guilds
意图

const client = new Client({
  intents: [GatewayIntentBits.Guilds, /* other intents */]
})

问题就在这里。它尝试设置每个人角色,但它未缓存,没有

Guilds
意图。

还有一个错字:

PermissionsFlagsBits
应该是
PermissionFlagsBits


0
投票
async def legacySend(ctx, channel=None, text=None, fileName=None):  #When not using /commands Check channel permissions before sending ALWAYS
if channel == None : channel = ctx.channel
permissions = channel.permissions_for(channel.guild.me) 
if text != None and permissions.send_messages == True : await channel.send( text )
if fileName != None and permissions.attach_files == True :
    await channel.send(file=discord.File(open('./' + fileName, 'rb'), fileName))

-1
投票

我也在解决这个问题,这对我有用:

(interaction.guild.members.me).permissionsIn("Your_Channel_ID").has(PermissionsBitField.Flags.SendMessages);
© www.soinside.com 2019 - 2024. All rights reserved.