Прежде всего, добро пожаловать в переполнение стека. Надеюсь, мы сможем вам помочь.
Давайте начнем с определения, когда участник присоединяется к голосовому каналу. Для этого мы можем прослушать событие вашего клиента voiceStateUpdate
. Затем мы можем сравнить старый голосовой канал с новым и посмотреть, присоединился ли участник или покинул его. Наконец, мы можем изменить разрешения для члена в текстовом канале, используя GuildChannel.overwritePermissions()
.
Обновление: Несколько "пар" текстовых каналов и голосовых каналов с похожим поведением.
Чтобы сделать это для множества различных каналов, вы можете настроить файл json для хранения голосовых каналов и соответствующих текстовых каналов, а затем выполнить итерацию по каждой паре, проверяя, соответствует ли ситуация какому-либо.
channelPairs.json
[
{ "voice": "voiceChannelIDHere", "text": "textChannelIDHere" }
]
index.js
const pairs = require('./channelPairs.json'); // Keep in mind the path may vary
client.on('voiceStateUpdate', (oldMember, newMember) => {
let oldID;
let newID;
if (oldMember.voiceChannel) oldID = oldMember.voiceChannel.id;
if (newMember.voiceChannel) newID = newMember.voiceChannel.id;
for (let i = 0; i < pairs.length; i++) {
const textChannel = newMember.guild.channels.get(pairs[i].text);
if (!textChannel) {
console.log('Invalid text channel ID in json.');
continue;
}
const vcID = pairs[i].voice;
if (oldID !== vcID && newID === vcID) { // Joined the voice channel.
textChannel.overwritePermissions(newMember, {
VIEW_CHANNEL: true,
SEND_MESSAGES: true
}).catch(console.error);
} else if (oldID === vcID && newID !== vcID) { // Left the voice channel.
textChannel.overwritePermissions(newMember, {
VIEW_CHANNEL: null,
SEND_MESSAGES: null
}).catch(console.error);
}
}
});