Как я могу разместить список идентификаторов - PullRequest
0 голосов
/ 13 июля 2020

У меня есть бот, который создает канал и категорию, а затем записывает идентификаторы категорий и каналов в файл categorylist.json (в котором записаны идентификаторы категорий, созданных ботом) и channellist.json (в котором Пишутся идентификаторы каналов, созданных ботом). После этого, когда пользователь присоединяется к созданному каналу с ботом, бот клонирует и переводит пользователя на новый канал. Когда пользователь покидает новый канал, он удаляется, потому что бот удаляет все каналы GUILD, где количество подключенных пользователей равно нулю.

Мне нужно заставить бот удалить все каналы, равные нулю, из списка categorylist.json, то есть сами создавали категории. Я прикрепил код своего бота внизу. js файл

ОРИГИНАЛЬНЫЙ ВОПРОС:

Мне нужно поместить файл с большим количеством категорий ID вместо guild. Я не знаю, как это сделать

    if (newState && newState.channelID) {
        ChannelJoin(newState.member, newState.guild.channels.resolve(newState.channelID));
    }

Отредактировано:

client.on("voiceStateUpdate", (oldState, newState) => {
    if (oldState && newState) {
        if (oldState.channelID === newState.channelID) {
            return;
        }
    }
    CreatorCategory = ReadCreatorCategory();
    if (oldState && oldState.channelID) {
        ChannelLeave(oldState.member, oldState.guild.channels.resolve(oldState.channelID));
    }
    if (newState && newState.channelID) {
        ChannelJoin(newState.member, newState.guild.channels.resolve(newState.channelID));
    }
});

1 Ответ

0 голосов
/ 15 июля 2020

Насколько я понимаю, вы хотите удалить все каналы категорий, идентификаторы которых находятся в categorylist.json и не имеют дочерних каналов. Вам нужно сделать 4 вещи:

  1. Прочитать содержимое categorylist.json
  2. Получить категории каналов из идентификаторов на шаге 1
  3. Найти категории из шага 2, у которых есть 0 дочерних каналов
  4. Удалить каналы с шага 3
// This is object destructuring: it’s the same as
// const readFile = require('fs').promises.readFile
const {readFile} = require('fs').promises


// Step 1
readFile('categorylist.json', 'utf8')
  .then(text => {
    const ids = JSON.parse(text)

    // Step 2: fetch categories
    return Promise.all(ids.map(id => client.channels.fetch(id)))
  })
  .then(categories => {
    // Step 3: find categories
    // The following is also destructuring: a => a.b is the same as ({b}) => b
    const emptyCategories = categories.filter(({children}) => !children.size)

    // Step 4: Delete channels
    return Promise.all(emptyCategories.map(channel => channel.delete()))
  })
  .catch(error => {
    throw error
  })

Тот же код с ES2017 async / await:

async function deleteEmptyCategories() {
  try {
    // Step 1
    const text = await readFile('categorylist.json', 'utf8')
    const ids = JSON.parse(text)

    // Step 2
    const categories = await Promise.all(ids.map(id => client.channels.fetch(id)))

    // Step 3
    const categoriesWithNoChildren = categories.filter(({children}) => !children.size)

    // Step 4
    await Promise.all(categoriesWithNoChildren.map(channel => channel.delete()))
  } catch (error) {
    throw error
  }
}
...