Я пытаюсь создать сценарий частного канала в discord.js v12, который после присоединения участника создает личную комнату, к которой может присоединиться только созданный человек, а другие не могут (только с помощью команды).
Я попытался заблокировать разрешение @everyoneCONNECT, но мне не удалось его определить. Я пытался определить его через ID, используя const, имея в виду settings.json, также пытался использовать guild.defaultRole и т.д., но ни один из них не работал. Может ли кто-нибудь помочь мне с моим сценарием?
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: everyone /*// problem is here /*/,
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: everyone /*// problem is here //*/,
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',
};



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете найти роль всех с помощью геттера RoleManager # все.
В вашем примере вы можете:
id: oldState.guild.roles.everyone.id,
deny: ["CONNECT"]
Вы можете использовать roles.everyone, который возвращает роль гильдии @everyone, или просто использовать ID гильдии. Любой из них будет работать:
{
id: oldState.guild.roles.everyone.id,
deny: ['CONNECT'],
};
Или же:
{
id: oldState.guild.id,
deny: ['CONNECT'],
};
Или же:
{
id: newState.guild.roles.everyone.id,
deny: ['CONNECT'],
};
Или же:
{
id: newState.guild.id,
deny: ['CONNECT'],
};
newState.guild.idидентификатор гильдии - это идентификатор, о котором все упоминают