diff --git a/code/bot.py b/code/bot.py index 21a0942..c27ca1a 100644 --- a/code/bot.py +++ b/code/bot.py @@ -28,6 +28,7 @@ class MyBot(commands.Bot): bot = MyBot() bot.remove_command("help") +bot.temp_command_count = {} # command_name: count @bot.event diff --git a/code/cogs/owner/stats.py b/code/cogs/owner/stats.py new file mode 100644 index 0000000..f6a7dec --- /dev/null +++ b/code/cogs/owner/stats.py @@ -0,0 +1,70 @@ +from discord.ext import commands, tasks +from discord import app_commands +import sqlite3 +import discord + +from global_variables import BOT_COLOR + + +class Stats(commands.Cog): + def __init__(self, bot): + self.bot = bot + + def cog_load(self): + connection = sqlite3.connect('count.db') + cursor = connection.cursor() + cursor.execute("CREATE TABLE IF NOT EXISTS count (command_name, count, PRIMARY KEY (command_name))") + connection.commit() + connection.close() + + self.dump_count.start() + + @tasks.loop(seconds=30) + async def dump_count(self): + connection = sqlite3.connect('count.db') + cursor = connection.cursor() + + for command_name, count in self.bot.temp_command_count.items(): + try: + cursor.execute("INSERT INTO count (command_name, count) VALUES (?, ?)", (command_name, count)) + except sqlite3.IntegrityError: + cursor.execute("UPDATE count SET count = count + ? WHERE command_name = ?", (count, command_name)) + + connection.commit() + connection.close() + self.bot.temp_command_count = {} + + + @commands.Cog.listener() + async def on_app_command_completion(self, interaction, command): + try: + self.bot.temp_command_count[interaction.command.name] += 1 + except KeyError: + self.bot.temp_command_count[interaction.command.name] = 1 + + + @commands.command() + @commands.dm_only() + @commands.is_owner() + async def stats(self, ctx: commands.Context): + connection = sqlite3.connect('count.db') + cursor = connection.cursor() + + embed = discord.Embed( + title="Command Statistics", + color=BOT_COLOR + ) + + total = 0 + data = cursor.execute("SELECT * FROM count").fetchall() + for entry in data: + embed.add_field(name=entry[0], value=f"` {entry[1]} `", inline=True) + total += entry[1] + + embed.add_field(name="TOTAL", value=f"` {total} `", inline=False) + + await ctx.send(embed=embed) + + +async def setup(bot): + await bot.add_cog(Stats(bot))