Lancer les script dans cet ordre.
Last active
October 4, 2018 17:02
-
-
Save cchudant/2d00d3206b872b0c33fe40ac8e0e8009 to your computer and use it in GitHub Desktop.
Graph des serveurs du bot FTNL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) | |
}() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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)) | |
}() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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