/* globals require, process, console */
/* eslint-disable @typescript-eslint/no-var-requires */
// This script will be ran periodically through CI
// don't touch it
const Discord = require("discord.js")
const fs = require("fs")
const { Readable } = require("stream")

// eslint-disable-next-line @typescript-eslint/no-unused-vars
function execute() {
  const client = new Discord.Client({
    intents: [Discord.Intents.FLAGS.GUILD_MEMBERS],
  })

  const { BOT_TOKEN } = process.env
  const TPH = "244230771232079873"
  const DESTINATION = "./users.json"

  const writeS = (content, dest) => {
    const source = new Readable()
    source.push(JSON.stringify(content))
    source.push(null)
    return source.pipe(dest)
  }

  client.once("ready", async () => {
    console.log("Bot ready, fetching user list...")
    const tph = client.guilds.cache.get(TPH)
    if (!tph) {
      throw Error("Bot is not in TPH, cannot fetch users")
    }
    const members = await tph.members.fetch()
    const memberInfo = members.map((member) => ({
      avatar: member.user.displayAvatarURL(),
      identifier: member.user.tag,
    }))
    const wrs = fs.createWriteStream(DESTINATION)
    console.log(`Fetched ${memberInfo.length} users, writing to ${DESTINATION}`)
    writeS(memberInfo, wrs).on("finish", () => {
      console.log("Finished writing list")
      process.exit(0)
    })
  })

  console.log("Attempting to log in...")
  client.login(BOT_TOKEN)
}

if (process.env.BOT_TOKEN) {
  execute()
} else {
  console.log("BOT_TOKEN missing, skipping.")
}
