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,
拒绝:[“连接”],
}),
],
}