Здравствуйте! Я бы хотел узнать, как можно сделать так, чтобы когда создатель "приватной" комнаты выходил, канал не удалялся. Такая система есть в VoiceMaster бот, и в ботах на серверах Tenderly 89Squad. А то мой бот при выходе создателя комнаты, комната удаляется и всех выкидывает. Я бы хотел чтобы если пользователи ещё есть, то комната не удалялась.
var servers = {};
module.exports = function(oM, nM) {
if (nM.voiceChannel) {
//если комнаты для создания приваток не существует
if (
!nM.voiceChannel.guild.channels.find(
channel => channel.name == "создать приват"
)
) {
nM.voiceChannel.guild
.createChannel(
"создать приват",
{
type: "VOICE",
permissionOverwrites: [
{
id: nM.guild.id,
deny: ["ADMINISTRATOR", "SPEAK"],
allow: ["CONNECT"]
}
]
},
{ reason: "Создан канал для приватных комнат" }
)
.then(() => {
nM.voiceChannel.guild.channels
.find(channel => channel.name == "создать приват")
.setUserLimit(1, "Канал для создания приватных комнат");
});
}
//создаём приватку если пользователь зайдёт в канал
if (nM.voiceChannel.name == "создать приват") {
nM.voiceChannel.guild
.createChannel("Приват", {
type: "VOICE",
parent: "665266615423598602",
permissionOverwrites: [
{
id: nM.guild.id,
deny: ["ADMINISTRATOR"],
allow: ["CONNECT", "SPEAK", "VIEW_CHANNEL"]
}
]
})
.then(room => {
nM.setVoiceChannel(room.id);
nM.voiceChannel.guild.channels
.find(channel => channel.id == room.id)
.overwritePermissions(nM, {
KICK_MEMBERS: true,
MANAGE_CHANNELS: true
});
if (!servers[nM.guild.id]) servers[nM.guild.id] = {};
if (!servers[nM.guild.id].voiceMember)
servers[nM.guild.id].voiceMember = {};
if (!servers[nM.guild.id].voiceMember[nM.id])
servers[nM.guild.id].voiceMember[nM.id] = {};
if (!servers[nM.guild.id].voiceMember[nM.id].room)
servers[nM.guild.id].voiceMember[nM.id].room = room.id;
servers[nM.guild.id].voiceMember[nM.id].room = room.id;
if (!servers[nM.guild.id].voiceMember[nM.id].interval)
servers[nM.guild.id].voiceMember[nM.id].interval = {};
servers[nM.guild.id].voiceMember[nM.id].interval = setInterval(() => {
if (nM.voiceChannel) {
if (
servers[nM.guild.id].voiceMember[nM.id].room !=
nM.voiceChannel.id
) {
nM.voiceChannel.guild.channels
.find(
channel =>
channel.id == servers[nM.guild.id].voiceMember[nM.id].room
)
.delete();
clearInterval(servers[nM.guild.id].voiceMember[nM.id].interval);
}
} else if (!nM.voiceChannel) {
//oM.voiceChannel.guild.channels.find(channel=>channel.id == servers[nM.guild.id].voiceMember[nM.id].room).delete();
clearInterval(servers[nM.guild.id].voiceMember[nM.id].interval);
}
}, 3000);
});
}
}
//При выходе из канала, удаление приват комнаты
if (!nM.voiceChannel) {
if (!servers[nM.guild.id]) servers[nM.guild.id] = {};
if (!servers[nM.guild.id].voiceMember)
servers[nM.guild.id].voiceMember = {};
if (!servers[nM.guild.id].voiceMember[nM.id])
servers[nM.guild.id].voiceMember[nM.id] = {};
if (!servers[nM.guild.id].voiceMember[nM.id].room)
servers[nM.guild.id].voiceMember[nM.id].room = 0;
if (!oM.voiceChannel) return;
if (servers[nM.guild.id].voiceMember[nM.id].room == oM.voiceChannel.id) {
oM.voiceChannel.guild.channels
.find(
channel => channel.id == servers[nM.guild.id].voiceMember[nM.id].room
)
.delete();
}
}
};
- основной код.
const discord = require("discord.js"),
createPrivateRoom = require("./events/createPrivateRoom.js");
var client = new discord.Client();
client.on("ready", () => {
console.log(`Привет, ${client.user.username} онлайн!`);
client.user.setPresence({
status: "online",
game: {
name: "за приватами",
type: "WATCHING"
}
});
});
client.on("voiceStateUpdate", (oldMember, newMember) => {
createPrivateRoom(oldMember, newMember);
});
client.login("токен");
- index.js
Так же подскажите как сделать команду для "кика" человека из данного голосового канала, так же как и на 89squad и Tenderly. К примеру создатель "приватной комнаты не желает видеть человека, он пишет команду !pkick @упоминание и человеку закрывается доступ в канал.