Javascript permissionOverwrites不会注意到授予@everyone角色的权限。我怎样才能解决这个问题?

Javascript permissionOverwrites不会注意到授予@everyone角色的权限。我怎样才能解决这个问题?,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,我想创建一个脚本,当一个人连接到特定的语音频道时,它会创建一个房间,只有这个人可以加入,其他人不能 剧本的逻辑很简单;它为连接到频道的人(讲话、语音活动等)创建权限,并拒绝来自@everybody角色的CONNECT权限 问题是,我的bot向连接到语音频道的人授予权限,但不更改@everybody角色的任何权限。我怎样才能解决这个问题 const { VoiceState } = require('discord.js'); const SettingsJSON = require('../..

我想创建一个脚本,当一个人连接到特定的语音频道时,它会创建一个房间,只有这个人可以加入,其他人不能

剧本的逻辑很简单;它为连接到频道的人(讲话、语音活动等)创建权限,并拒绝来自
@everybody
角色的
CONNECT
权限

问题是,我的bot向连接到语音频道的人授予权限,但不更改
@everybody
角色的任何权限。我怎样才能解决这个问题

const { VoiceState } = require('discord.js');
const SettingsJSON = require('../../Configuration/Settings.json');
const Settings = SettingsJSON.PrivHub;

module.exports = async (oldState, newState) => {
  let mainChannel = oldState.guild.channels.cache.get(Settings.Room);
  if (!mainChannel) return;

  if (
    !oldState.channelID &&
    newState.channelID &&
    newState.channel.parentID == mainChannel.parentID &&
    newState.channelID == mainChannel.id
  ) {
    newState.guild.channels
      .create(
        `${Settings.Symbol} ${newState.member.displayName} kişisinin odası`,
        {
          type: 'voice',
          parent: mainChannel.parentID,
          permissionOverwrites: [
            mainChannel.permissionOverwrites.clone().set(
              newState.member.id,
              {
                id: newState.member.id,
                allow: [
                  'MANAGE_CHANNELS',
                  'STREAM',
                  'VIEW_CHANNEL',
                  'CONNECT',
                  'SPEAK',
                  'USE_VAD',
                ],
              },
              {
                id: oldState.guild.roles.everyone.id,
                deny: ["CONNECT"],
              },
            ),
          ],
        },
      )
      .then((channel) => {
        if (newState.member && newState.member.voice.channelID)
          newState.member.voice.setChannel(channel);
      });
    return;
  } else if (oldState.channelID && newState.channelID) {
    let oldChannel = oldState.channel;
    if (
      oldChannel.position > mainChannel.position &&
      oldChannel.parentID == mainChannel.parentID &&
      oldChannel.members.size <= 0 &&
      !oldChannel.deleted
    )
      oldChannel.delete().catch(undefined);
    if (
      newState.channelID == mainChannel.id &&
      newState.channel.parentID == mainChannel.parentID
    ) {
      newState.guild.channels
        .create(
          `${Settings.Symbol} ${newState.member.displayName} kişisinin odası`,
          {
            type: 'voice',
            parent: mainChannel.parentID,
            permissionOverwrites: [
              mainChannel.permissionOverwrites.clone().set(
                newState.member.id,
                {
                  id: newState.member.id,
                  allow: [
                    'MANAGE_CHANNELS',
                    'STREAM',
                    'VIEW_CHANNEL',
                    'CONNECT',
                    'SPEAK',
                    'USE_VAD',
                  ],
                },
                {
                id: oldState.guild.roles.everyone.id,
                deny: ["CONNECT"],
                },
              ),
            ],
          },
        )
        .then((channel) => {
          if (newState.member && newState.member.voice.channelID)
            newState.member.voice.setChannel(channel);
        });
    }
    return;
  } else if (
    oldState.channelID &&
    oldState.channel.parentID == mainChannel.parentID &&
    !newState.channelID
  ) {
    let oldChannel = oldState.channel;
    if (
      oldChannel.position > mainChannel.position &&
      oldChannel.members.size <= 0 &&
      !oldChannel.deleted
    )
      oldChannel.delete().catch(undefined);
  }
};

module.exports.config = {
  Event: 'voiceStateUpdate',
};
const{VoiceState}=require('discord.js');
const SettingsJSON=require('../../Configuration/Settings.json');
const Settings=SettingsJSON.PrivHub;
module.exports=异步(旧状态、新状态)=>{
让mainChannel=oldState.guild.channels.cache.get(Settings.Room);
如果(!主通道)返回;
如果(
!oldState.channelID&&
newState.channelID&&
newState.channel.parentID==mainChannel.parentID&&
newState.channelID==mainChannel.id
) {
newState.guild.channels
.创造(
`${Settings.Symbol}${newState.member.displayName}kişisinin odası`,
{
键入:“声音”,
父项:mainChannel.parentID,
许可证覆盖:[
mainChannel.permissionOverwrites.clone().set(
newState.member.id,
{
id:newState.member.id,
允许:[
“管理渠道”,
"溪流",,
“查看频道”,
“连接”,
“说”,
“使用_-VAD”,
],
},
{
id:oldState.guild.roles.everyone.id,
拒绝:[“连接”],
},
),
],
},
)
。然后((频道)=>{
if(newState.member&&newState.member.voice.channelID)
newState.member.voice.setChannel(频道);
});
返回;
}else if(oldState.channelID&&newState.channelID){
设oldChannel=oldState.channel;
如果(
oldChannel.position>mainChannel.position&&
oldChannel.parentID==mainChannel.parentID&&
oldChannel.members.size{
if(newState.member&&newState.member.voice.channelID)
newState.member.voice.setChannel(频道);
});
}
返回;
}否则如果(
oldState.channelID&&
oldState.channel.parentID==mainChannel.parentID&&
!newState.channelID
) {
设oldChannel=oldState.channel;
如果(
oldChannel.position>mainChannel.position&&

oldChannel.members.size克隆集合
mainChannel.permissions覆盖
后,您仅使用带有键
newState.member.id
set()
方法

该方法只接受两个参数,即要添加的元素的键和值。在上面的代码中,您使用三个参数,第一个参数是键,第二个参数是带有
allow
属性的对象,最后一个参数是带有
deny
属性的对象(应该用于
@everybody
角色)

在JavaScript中,如果在函数只需要两个参数时传递一些额外参数,则不会发生任何事情,只会忽略它。这里就是这样。您只需使用
allow
prop设置第一个覆盖

要解决此问题,可以使用两个
set()
方法;一个用于成员,另一个用于
@everybody
角色:

{
键入:“声音”,
父项:mainChannel.parentID,
许可证覆盖:[
mainChannel.Permissions覆盖
.clone()
.set(newState.member.id{
id:newState.member.id,
允许:[
“管理渠道”,
"溪流",,
“查看频道”,
“连接”,
“说”,
“使用_-VAD”,
],
})
.set(oldState.guild.roles.everybody.id、{
id:oldState.guild.roles.everyone.id,
拒绝:[“连接”],
}),
],
}