Skip to content

Instantly share code, notes, and snippets.

@cchudant
Last active October 4, 2018 17:02
Show Gist options
  • Save cchudant/2d00d3206b872b0c33fe40ac8e0e8009 to your computer and use it in GitHub Desktop.
Save cchudant/2d00d3206b872b0c33fe40ac8e0e8009 to your computer and use it in GitHub Desktop.
Graph des serveurs du bot FTNL

Graph des serveurs du bot FTNL

Lancer les script dans cet ordre.

Résultats

const { Client } = require('discord.js')
const fs = require('fs')
const { promisify } = require('util')
const fsWriteFile = promisify(fs.writeFile)
const client = new Client()
client.login(process.env.DISCORD_TOKEN)
.then(async () => {
console.log('Connected')
const channel = client.guilds.get('408947376041230346').channels.get('410937475683450880')
let allMessages = []
let messages = []
do {
messages = (await channel.fetchMessages({ limit: 100, before: messages.length && messages[messages.length - 1].id })).array()
allMessages = allMessages.concat(messages)
console.log(`Fetched ${allMessages.length} messages`)
} while (messages.length)
allMessages = allMessages.map(({ embeds, ...fields }) => ({ embeds: embeds.length ? embeds : [{}], ...fields }))
allMessages = allMessages.map(({
id,
createdTimestamp,
embeds: [{ title, type, description }],
content,
author: { id: aid, username, tag }
}) => ({
id,
createdTimestamp,
embed: { title, type, description },
content,
author: { id: aid, username, tag }
}))
await fsWriteFile('ftnl_servers_data_raw.json', JSON.stringify(allMessages, null, 2))
console.log('All done! :)')
})
.catch(console.error)
.then(() => process.exit(0))
const fs = require('fs')
const { promisify } = require('util')
const fsReadFile = promisify(fs.readFile)
const fsWriteFile = promisify(fs.writeFile)
void async function() {
let data = JSON.parse(await fsReadFile('ftnl_servers_data_raw.json'))
data = data.filter(({ author: { id }}) => id === '370665722780712960') //Filter messages sent by FTNL
data = data.map(({
id,
createdTimestamp,
embed: { title, type, description },
content,
author: { id: aid, username, tag }
}) => {
let res
//text join
{
const test = content && /^FTNL join guild (.+). la Guild a (\d+) membres, son créateur est : <@(\d+)>$/.exec(content)
if (test) {
const [, name, members, creator] = test
res = {
action: "+",
name,
members: +members,
creator,
date: createdTimestamp,
message: content
}
}
}
//text leave
{
const test = content && /^FTNL leave guild (.+), son créateur est : <@(\d+)>$/.exec(content)
if (test) {
const [, name, creator] = test
res = {
action: "-",
name,
creator,
date: createdTimestamp,
message: content
}
}
}
//embed join
{
const test = description && /^(.+) Viens d'ajouter FTNL a sa liste de bot !\nLa Guild a (\d+) membres\. \nSon créateur est : <@(\d+)> \((.+)\)$/.exec(description)
if (test) {
const [, name, members, creator, creatorTag] = test
res = {
action: "+",
name,
members: +members,
creator,
creatorTag,
date: createdTimestamp,
message: description
}
}
}
//embed leave
{
const test = description && /^(.+) Viens de retirer FTNL de sa liste de bot\.\.\.\nLa Guild a (\d+) membres\. \nSon créateur est : <@(\d+)> \((.+)\)$/.exec(description)
if (test) {
const [, name, members, creator, creatorTag] = test
res = {
action: "-",
name,
members: +members,
creator,
creatorTag,
date: createdTimestamp,
message: description
}
}
}
//embed join 2
{
const test = description && /^(.+) Viens d'ajouter FTNL a sa liste de bot !\nLa Guild a (\d+) membres\. \nSon créateur est : <@(\d+)> \((.+)$/.exec(description)
if (test) {
const [, name, members, creator, creatorTag] = test
res = {
action: "+",
name,
members: +members,
creator,
creatorTag,
date: createdTimestamp,
message: description
}
}
}
//embed leave 2
{
const test = description && /^(.+) Viens de retirer FTNL de sa liste de bot\.\.\.\nLa Guild a (\d+) membres\. \nSon créateur est : <@(\d+)> \((.+)$/.exec(description)
if (test) {
const [, name, members, creator, creatorTag] = test
res = {
action: "-",
name,
members: +members,
creator,
creatorTag,
date: createdTimestamp,
message: description
}
}
}
if (!res)
console.log('Cannot understand', {
id,
createdTimestamp,
embeds: [{ title, type, description }],
content,
author: { id: aid, username, tag }
})
return res
})
await fsWriteFile('ftnl_servers_data_extr.json', JSON.stringify(data, null, 2))
}()
//const { createObjectCsvWriter } = require('csv-writer')
const fs = require('fs')
const { promisify } = require('util')
const fsReadFile = promisify(fs.readFile)
const fsWriteFile = promisify(fs.writeFile)
/*const csvWriter = createObjectCsvWriter({
path: 'ftnl_servers_data.csv',
header: [
{ id: 'date', title: 'DATE' },
{ id: 'servers', title: 'SERVERS' }
]
})*/
void async function() {
let data = JSON.parse(await fsReadFile('ftnl_servers_data_extr.json'))
data.reverse()
let cumSum = 0
data = data.map(({ date, action }) => {
cumSum += action == '+' || -1
return { date: new Date(date), servers: cumSum }
})
//await csvWriter.writeRecords(data)
await fsWriteFile('ftnl_servers_data.json', JSON.stringify(data, null, 2))
}()
const plotly = require('plotly')(process.env.PLOTLY_API_USER, process.env.PLOTLY_API_KEY)
void async function() {
const raw = require('./ftnl_servers_data.json')
const x = raw.map(({ date }) => date)
const y = raw.map(({ servers }) => servers)
const data = [{ x, y, type: 'scatter' }]
const layout = { filename: 'ftnl_servers', fileopt: 'overwrite', title: 'Basic Time Series' }
plotly.plot(data, layout, (err, msg) => {
err && console.error(err)
console.log(msg)
})
}()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment