/ src / modules / commands / activityStats.ts
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;