activityStats.ts
1 import { PermissionsBitField, SlashCommandBuilder, EmbedBuilder } from 'discord.js'; 2 import fs from 'fs'; 3 4 import { DBActivityStats, getLang, prepare } from '../db'; 5 import { Command } from '../commandHandler'; 6 import config from '../config'; 7 import { __, __h_dc } from '../messages'; 8 9 export default { 10 data: new SlashCommandBuilder() 11 .setName('activitystats') 12 .setDescription('Shows a list of activities in this guild.') 13 .setDescriptionLocalizations(__h_dc('Shows a list of activities in this guild.')) 14 .setDMPermission(false) 15 .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageRoles), 16 17 execute: async interaction => { 18 const locale = getLang(interaction); 19 20 const activityStats = 21 prepare('SELECT * FROM activityStats WHERE guildID = ?') 22 .all(interaction.guildId!) as DBActivityStats[]; 23 24 if (activityStats.length === 0) { 25 interaction.reply({ 26 embeds: [ 27 new EmbedBuilder() 28 .setDescription(__({ phrase: 'No activity stats found.', locale })) 29 .setColor(config.COLOR) 30 ] 31 }); 32 } else { 33 activityStats.sort((a, b) => { 34 return b.count - a.count; 35 }); 36 let activities = ''; 37 for (const activity of activityStats) { 38 activities += activity.activityName + '\n'; 39 } 40 const filename = `activities-${interaction.id.substring(0, 7)}.txt`; 41 fs.writeFileSync(filename, activities); 42 await interaction.reply({ 43 content: __({ phrase: 'Activities (sorted by frequency):', locale }), 44 files: [filename] 45 }); 46 fs.unlinkSync(filename); 47 } 48 } 49 } as Command;