added user-fetching functionality on build

This commit is contained in:
Xetera
2019-07-29 04:12:04 -04:00
committed by Jean-Philippe Sirois
parent 1d93f4e160
commit 1b6525f4b4
15 changed files with 172 additions and 32 deletions
+34
View File
@@ -0,0 +1,34 @@
const DEFAULT_AVATAR_MODULO = 5
module.exports = {
splitHash(identifier) {
const hashLocation = identifier.lastIndexOf("#")
if (hashLocation === -1) {
throw Error(`Invalid name format ${identifier}`)
}
const name = identifier.slice(0, hashLocation)
const hash = identifier.slice(hashLocation + 1)
return [name, hash]
},
getDefaultAvatar(name) {
const [_, hash] = this.splitHash(hashLocation)
const avatar = Number(hash) % DEFAULT_AVATAR_MODULO
return `https://cdn.discordapp.com/embed/avatars/${avatar}.png`
},
resolveAuthor(users, author) {
const target = users.find(user => user.identifier === author)
const [name, hash] = this.splitHash(author)
const avatar = target ? target.avatar : this.getDefaultAvatar(author)
return {
name,
hash,
avatar,
}
},
resolveAuthors(users, authors) {
return authors.map(author => this.resolveAuthor(users, author))
},
}
+42
View File
@@ -0,0 +1,42 @@
// This script will be ran periodically through CI
// don't touch it
const Discord = require("discord.js")
const fs = require("fs")
const { Readable, Writable } = require("stream")
const client = new Discord.Client()
const { BOT_TOKEN } = process.env
const TPH = "244230771232079873"
const DESTINATION = "./users.json"
if (!BOT_TOKEN) {
throw Error("Missing BOT_TOKEN environment variable")
}
const writeS = (content, dest) => {
const source = new Readable()
source.push(JSON.stringify(content))
source.push(null)
source.pipe(dest)
}
client.once("ready", async () => {
console.log("Bot ready, fetching user list...")
const tph = client.guilds.get(TPH)
if (!tph) {
throw Error("Bot is not in TPH, cannot fetch users")
}
const guild = await tph.fetchMembers()
const memberInfo = guild.members.map(member => ({
identifier: `${member.user.username}#${member.user.discriminator}`,
avatar: member.user.displayAvatarURL,
}))
const wrs = fs.createWriteStream(DESTINATION)
console.log(`Fetched ${memberInfo.length} users, writing to ${DESTINATION}`)
writeS(memberInfo, wrs)
process.exit(0)
})
console.log("Attempting to log in...")
client.login(process.env.BOT_TOKEN)