1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Haha-Yes/event/listeners/ready.js

122 lines
4.0 KiB
JavaScript

const { Listener } = require('discord-akairo');
const akairoVersion = require('discord-akairo').version;
const djsVersion = require('discord.js').version;
const pjson = require('../../package.json');
const { prefix, statsChannel, ownerID, supportServer, exposeStats } = require('../../config.json');
const game = require('../../json/status/playing.json');
const watch = require('../../json/status/watching.json');
class ReadyListener extends Listener {
constructor() {
super('ready', {
emitter: 'client',
event: 'ready'
});
}
async exec() {
let commandSize = this.client.commandHandler.modules.size;
let clientTag = this.client.user.tag;
let guildSize = this.client.guilds.size;
let userSize = this.client.users.size;
let channelSize = this.client.channels.size;
let profilePicture = this.client.user.displayAvatarURL();
let clientID = this.client.user.id;
let author = this.client.users.get(ownerID).tag;
// Send stats to the console
console.log('===========[ READY ]===========');
console.log(`\x1b[32mLogged in as \x1b[34m${clientTag}\x1b[0m! (\x1b[33m${clientID}\x1b[0m)`);
console.log(`Ready to serve in \x1b[33m${channelSize}\x1b[0m channels on \x1b[33m${guildSize}\x1b[0m servers, for a total of \x1b[33m${userSize}\x1b[0m users.`);
console.log(`There is \x1b[33m${commandSize}\x1b[0m command loaded`);
console.log(`${this.client.readyAt}`);
//Bot status
if (Math.floor((Math.random() * 2) + 1) == 1) {
console.log('Status type: \x1b[32mWatching\x1b[0m');
let status = watch[Math.floor((Math.random() * watch.length))];
status = status.replace('${prefix}', prefix[0]);
this.client.user.setActivity(`${status} | My prefix is: ${prefix[0]} `, { type: 'WATCHING' });
} else {
console.log('Status type: \x1b[32mPlaying\x1b[0m');
let status = game[Math.floor((Math.random() * game.length))];
status = status.replace('${prefix}', prefix[0]);
this.client.user.setActivity(`${status} | My prefix is: ${prefix[0]}`, { type: 'PLAYING' });
}
// If stats channel settings exist, send bot stats to it
if (statsChannel) {
const channel = this.client.channels.get(statsChannel);
channel.send(`Ready to serve in ${channelSize} channels on ${guildSize} servers, for a total of ${userSize} users.\nThere is ${commandSize} command loaded\n${this.client.readyAt}`);
}
/*
//Fetch messages in every channel ( so they can still enter starboard in case of reboot)
let array = [];
let channels = this.client.channels.array();
for (const channel of channels.values()) {
array.push(channel.id);
}
for (let i = 0; i < this.client.channels.size; i++) {
let channel = this.client.channels.get(array[i]);
if (channel.messages) {
channel.messages.fetch({ limit: 10 })
.then(messages => console.log(`Received ${messages.size} messages`))
.catch(err => console.error(err));
}
}
*/
// Expose stats
if (exposeStats) {
const port = 3000;
const http = require('http');
const requestHandler = (req, res) => {
// Refresh some info
commandSize = this.client.commandHandler.modules.size;
guildSize = this.client.guilds.size;
userSize = this.client.users.size;
profilePicture = this.client.user.displayAvatarURL();
let response = {
'commandSize': commandSize,
'ClientTag': clientTag,
'guildSize': guildSize,
'userSize': userSize,
'prefixSize': prefix.length,
'profilePicture': profilePicture,
'clientID': clientID,
'djsVersion': djsVersion,
'akairoVersion': akairoVersion,
'homepage': pjson.homepage,
'author': author,
'supportServer': supportServer
};
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
};
const server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err);
}
});
console.log(`Exposing stats on port ${port}`);
}
console.log('===========[ READY ]===========');
}
}
module.exports = ReadyListener;