Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Дискорд войс

  • Автор темы Автор темы lujich
  • Дата начала Дата начала
Дебил раздела «Читы для Minecraft»
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Янв 2019
Сообщения
481
Реакции
88
Как сделать, чтоб показывалось количество человек в войсе?
 
ставь лимит пользователей в настройках канала, например 10. Теперь когда ты поставил при пустом канале будет написано 0/10
 
ставь лимит пользователей в настройках канала, например 10. Теперь когда ты поставил при пустом канале будет написано 0/10
нет, я имею ввиду чтоб выводился отдельный войс, в который никто не может войти и в его названии писалось количество человек во всех войсах на сервере.
 
Рабочий код на JS.

JavaScript:
Expand Collapse Copy
setInterval( () => {

let voice = 0;

                bot.guilds.get("ID сервера").channels.filter(chan => chan.type === 'voice').forEach((channel) => {voice += channel.members.size});

bot.channels.get("ID канала").setName(`Голосовой\u2009онлайн:\u2009${voice}`)

}, 5000)

}
 
нет, я имею ввиду чтоб выводился отдельный войс, в который никто не может войти и в его названии писалось количество человек во всех войсах на сервере.
Плагины, которых я не знаю
 
Рабочий код на JS.

JavaScript:
Expand Collapse Copy
setInterval( () => {

let voice = 0;

                bot.guilds.get("ID сервера").channels.filter(chan => chan.type === 'voice').forEach((channel) => {voice += channel.members.size});

bot.channels.get("ID канала").setName(`Голосовой\u2009онлайн:\u2009${voice}`)

}, 5000)

}
че за говнокод, че за интервалы...

JavaScript:
Expand Collapse Copy
client.on("voiceStateUpdate", async (oldM, newM) => {
   
    // Если пользователь не менял голосовой канал
    if (oldM.voiceChannel.id === newM.voiceChannel.id) return;
   
    // Вызов функции обновления кол-ва
    await updateCount(oldM.guild);
})

async function updateCount (guild) {
   
    // Получаем ID канала со статистикой
    let channelID = getChannel(guild);
   
    // Если не нашли, игнорируем
    if (!channelID) return;
   
    // Получаем объект канала
    let channel = await guild.channels.get(channelID);
   
    // Если не нашли, игнорируем
    if (!channel) return;
   
    // Смена имени
    let bool = await setName(channel);
}

function getChannel (guild) {
    let mass = {
        "ID сервера": "ID канала со статистикой",
        "ID сервера2": "ID канала со статистикой2"
    }
   
    let find = mass[guild];
    return find;
}

// Сделано, чтобы смена имени канала происходила не чаще, чем в x секунд
var updated = false;

// Время перед повторной сменой названия канала
var timeout = 15;
async function setName(channel) {
    if (!updated) {
        // Получаем кол-во
        let num = 0;
        let talk = 0;
        await guild.channels.filter(ch => ch.type === 'voice').forEach(ch => {num += ch.members.size; talk += ch.members.filter(m => !m.deaf() && !m.mute()).size});
        await channel.setName(`В войсе - ${talk}/${num}`); // Менять название канала тут, ${num} - кол-во говорящих, ${talk} - кол-во не замученных (которые реально говорят)
        updated = true;
        setTimeout(() => {
            updated = false;
        }, timeout*1000);
    }
}

Отмечу, что данное решение данного вопроса будет рациональным, ведь если на сервере никто не взаимодействует с голосовыми каналами, то твои интервалы всё равно будут производиться, сделал хотя бы запись и проверку через переменную, и если значения разные - обновление имени, журнал засран будет хмао...
 
Последнее редактирование:
Назад
Сверху Снизу