mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-03 23:36:43 +02:00
Add last-run file support
This commit is contained in:
@@ -11,6 +11,7 @@ report*.json
|
|||||||
.env
|
.env
|
||||||
config.json
|
config.json
|
||||||
command-leaderboard.json
|
command-leaderboard.json
|
||||||
|
command-last-run.json
|
||||||
|
|
||||||
# Tesseract Trained Data
|
# Tesseract Trained Data
|
||||||
*.traineddata
|
*.traineddata
|
||||||
|
|||||||
@@ -92,13 +92,26 @@ client.on('ready', async () => {
|
|||||||
client.logger.error(`[LEADERBOARD] Could not parse command-leaderboard.json:\n${err.stack}`);
|
client.logger.error(`[LEADERBOARD] Could not parse command-leaderboard.json:\n${err.stack}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export command-leaderboard.json every 30 minutes
|
// Export command-last-run.json
|
||||||
|
try {
|
||||||
|
const results = client.importLastRun();
|
||||||
|
if (!results) client.logger.error('[LASTRUN] command-last-run.json is not formatted correctly.');
|
||||||
|
} catch (err) {
|
||||||
|
client.logger.error(`[LASTRUN] Could not parse command-last-run.json:\n${err.stack}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export command-leaderboard.json and command-last-run.json every 30 minutes
|
||||||
client.setInterval(() => {
|
client.setInterval(() => {
|
||||||
try {
|
try {
|
||||||
client.exportCommandLeaderboard();
|
client.exportCommandLeaderboard();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
client.logger.error(`[LEADERBOARD] Failed to export command-leaderboard.json:\n${err.stack}`);
|
client.logger.error(`[LEADERBOARD] Failed to export command-leaderboard.json:\n${err.stack}`);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
client.exportLastRun();
|
||||||
|
} catch (err) {
|
||||||
|
client.logger.error(`[LASTRUN] Failed to export command-last-run.json:\n${err.stack}`);
|
||||||
|
}
|
||||||
}, 1.8e+6);
|
}, 1.8e+6);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -178,6 +191,7 @@ client.on('guildMemberRemove', async member => {
|
|||||||
client.on('disconnect', event => {
|
client.on('disconnect', event => {
|
||||||
client.logger.error(`[DISCONNECT] Disconnected with code ${event.code}.`);
|
client.logger.error(`[DISCONNECT] Disconnected with code ${event.code}.`);
|
||||||
client.exportCommandLeaderboard();
|
client.exportCommandLeaderboard();
|
||||||
|
client.exportLastRun();
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ module.exports = class LastRunCommand extends Command {
|
|||||||
|
|
||||||
run(msg, { command }) {
|
run(msg, { command }) {
|
||||||
if (command.lastRun === undefined) return msg.reply('That command\'s usage stats aren\'t being tracked.');
|
if (command.lastRun === undefined) return msg.reply('That command\'s usage stats aren\'t being tracked.');
|
||||||
if (!command.lastRun) return msg.reply(`The \`${command.name}\` command has not been run since last reboot.`);
|
if (!command.lastRun) return msg.reply(`The \`${command.name}\` command has never been run.`);
|
||||||
const displayTime = moment.utc(command.lastRun).format('MM/DD/YYYY h:mm A');
|
const displayTime = moment.utc(command.lastRun).format('MM/DD/YYYY h:mm A');
|
||||||
return msg.say(`The \`${command.name}\` command was last run on **${displayTime}**.`);
|
return msg.say(`The \`${command.name}\` command was last run on **${displayTime}**.`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
const Command = require('../../structures/Command');
|
||||||
|
|
||||||
|
module.exports = class CommandLastRunExportCommand extends Command {
|
||||||
|
constructor(client) {
|
||||||
|
super(client, {
|
||||||
|
name: 'command-last-run-export',
|
||||||
|
aliases: [
|
||||||
|
'cmd-lr-export',
|
||||||
|
'cmd-last-run-export',
|
||||||
|
'command-lr-export',
|
||||||
|
'export-cmd-lr',
|
||||||
|
'export-cmd-last-run',
|
||||||
|
'export-command-lr',
|
||||||
|
'export-command-last-run'
|
||||||
|
],
|
||||||
|
group: 'util',
|
||||||
|
memberName: 'command-last-run-export',
|
||||||
|
description: 'Exports a command last run JSON file.',
|
||||||
|
details: 'Only the bot owner(s) may use this command.',
|
||||||
|
ownerOnly: true,
|
||||||
|
guarded: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async run(msg) {
|
||||||
|
const result = this.client.exportLastRun();
|
||||||
|
await msg.direct({ files: [{ attachment: result, name: 'command-last-run.json' }] });
|
||||||
|
return msg.say('📬 Sent `command-last-run.json` to your DMs!');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
const Command = require('../../structures/Command');
|
||||||
|
|
||||||
|
module.exports = class CommandLastRunImportCommand extends Command {
|
||||||
|
constructor(client) {
|
||||||
|
super(client, {
|
||||||
|
name: 'command-last-run-import',
|
||||||
|
aliases: [
|
||||||
|
'cmd-lr-import',
|
||||||
|
'cmd-last-run-import',
|
||||||
|
'command-lr-import',
|
||||||
|
'import-cmd-lr',
|
||||||
|
'import-cmd-last-run',
|
||||||
|
'import-command-lr',
|
||||||
|
'import-command-last-run'
|
||||||
|
],
|
||||||
|
group: 'util',
|
||||||
|
memberName: 'command-last-run-import',
|
||||||
|
description: 'Imports a command last run JSON file.',
|
||||||
|
details: 'Only the bot owner(s) may use this command.',
|
||||||
|
ownerOnly: true,
|
||||||
|
guarded: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
run(msg) {
|
||||||
|
try {
|
||||||
|
const results = this.client.importLastRun();
|
||||||
|
if (!results) return msg.reply('The JSON file provided is invalid.');
|
||||||
|
return msg.say('Successfully imported command last run.');
|
||||||
|
} catch (err) {
|
||||||
|
return msg.reply(`Could not read \`command-last-run.json\`: \`${err.message}\`.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -24,8 +24,10 @@ module.exports = class ReloadCommand extends Command {
|
|||||||
|
|
||||||
run(msg, { command }) {
|
run(msg, { command }) {
|
||||||
this.client.exportCommandLeaderboard();
|
this.client.exportCommandLeaderboard();
|
||||||
|
this.client.exportLastRun();
|
||||||
command.reload();
|
command.reload();
|
||||||
this.client.importCommandLeaderboard();
|
this.client.importCommandLeaderboard();
|
||||||
|
this.client.importLastRun();
|
||||||
return msg.say(`Reloaded the \`${command.name}\` command.`);
|
return msg.say(`Reloaded the \`${command.name}\` command.`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ module.exports = class ShutdownCommand extends Command {
|
|||||||
try {
|
try {
|
||||||
this.uses++;
|
this.uses++;
|
||||||
this.client.exportCommandLeaderboard();
|
this.client.exportCommandLeaderboard();
|
||||||
|
this.client.exportLastRun();
|
||||||
this.client.logger.info('[SHUTDOWN] Manual shutdown engaged.');
|
this.client.logger.info('[SHUTDOWN] Manual shutdown engaged.');
|
||||||
const text = texts[Math.floor(Math.random() * texts.length)];
|
const text = texts[Math.floor(Math.random() * texts.length)];
|
||||||
await msg.say(text);
|
await msg.say(text);
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "xiao",
|
"name": "xiao",
|
||||||
"version": "128.4.1",
|
"version": "128.4.2",
|
||||||
"description": "Your personal server companion.",
|
"description": "Your personal server companion.",
|
||||||
"main": "Xiao.js",
|
"main": "Xiao.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -91,6 +91,38 @@ module.exports = class XiaoClient extends CommandoClient {
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
importLastRun() {
|
||||||
|
const read = fs.readFileSync(path.join(__dirname, '..', 'command-last-run.json'), {
|
||||||
|
encoding: 'utf8'
|
||||||
|
});
|
||||||
|
const file = JSON.parse(read);
|
||||||
|
if (typeof file !== 'object' || Array.isArray(file)) return null;
|
||||||
|
for (const [id, value] of Object.entries(file)) {
|
||||||
|
if (!value) continue;
|
||||||
|
const date = new Date(value);
|
||||||
|
if (date.toString() === 'Invalid Date') continue;
|
||||||
|
const found = this.registry.commands.get(id);
|
||||||
|
if (!found || found.lastRun === undefined) continue;
|
||||||
|
found.lastRun = date;
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
exportLastRun() {
|
||||||
|
let text = '{';
|
||||||
|
for (const command of this.registry.commands.values()) {
|
||||||
|
if (command.lastRun === undefined) continue;
|
||||||
|
text += `\n "${command.name}": "${command.lastRun ? command.lastRun.toISOString() : null}",`;
|
||||||
|
}
|
||||||
|
text = text.slice(0, -1);
|
||||||
|
text += '\n}\n';
|
||||||
|
const buf = Buffer.from(text);
|
||||||
|
fs.writeFileSync(path.join(__dirname, '..', 'command-last-run.json'), buf, {
|
||||||
|
encoding: 'utf8'
|
||||||
|
});
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
fetchReportChannel() {
|
fetchReportChannel() {
|
||||||
if (!REPORT_CHANNEL_ID) return null;
|
if (!REPORT_CHANNEL_ID) return null;
|
||||||
return this.channels.fetch(REPORT_CHANNEL_ID);
|
return this.channels.fetch(REPORT_CHANNEL_ID);
|
||||||
|
|||||||
Reference in New Issue
Block a user