diff --git a/.gitignore b/.gitignore index 75812b8..df1d76e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ files/lost.json files/locked.json files/database.json files/ufora_notifications.json -files/commands.json .idea/ __pycache__ .env \ No newline at end of file diff --git a/cogs/events.py b/cogs/events.py index 6373039..238cadc 100644 --- a/cogs/events.py +++ b/cogs/events.py @@ -3,8 +3,7 @@ import datetime import discord from discord.ext import commands from functions import checks, easterEggResponses -from functions.database import stats, muttn, custom_commands -from functions import commands as command_stats +from functions.database import stats, muttn, custom_commands, commands as command_stats import pytz import time import traceback @@ -96,7 +95,8 @@ class Events(commands.Cog): print("{} in {}: {}".format(ctx.author.display_name, "DM" if DM else "{} ({})".format(ctx.channel.name, ctx.guild.name), ctx.message.content)) - command_stats.updateFile(ctx) + + command_stats.invoked() @commands.Cog.listener() async def on_command_error(self, ctx, err): diff --git a/databases.md b/databases.md index 13fd533..2c87ef7 100644 --- a/databases.md +++ b/databases.md @@ -24,6 +24,13 @@ Used in stats.py - Stats.Channels & the daily task that updates the message coun 0 channel_id: bigint, unique, primary key | The channel id of this channel 1 message_count: numeric | The amount of messages sent in this channel +### command_stats + +Used in commands.py, tracks counters of how many commands are invoked per day. + + 0 day: date, unique, primary key | The date that is being tracked + 1 amount: integer | The total amount of commands that were invoked on this day + ### currencytable Used in all Currency commands (Dinks, Bank, Bitcoin, Gambling, ...) diff --git a/functions/commands.py b/functions/commands.py deleted file mode 100644 index 2f62936..0000000 --- a/functions/commands.py +++ /dev/null @@ -1,7 +0,0 @@ -from discord.ext import commands - - -def updateFile(ctx: commands.Context): - prefix_used = ctx.prefix - command: commands.Command = ctx.command - pass diff --git a/functions/database/commands.py b/functions/database/commands.py new file mode 100644 index 0000000..fda1d11 --- /dev/null +++ b/functions/database/commands.py @@ -0,0 +1,78 @@ +from functions.database import utils +import time + + +def invoked(): + t = time.localtime() + day_string: str = f"{t.tm_year}-{_lz(t.tm_mon)}-{_lz(t.tm_mday)}" + _update(day_string) + + +def _lz(arg: int) -> str: + """ + Add leading zeroes if necessary (YYYY-MM-DD) + """ + arg = str(arg) + + if len(arg) == 1: + return f"0{arg}" + + return arg + + +def _is_present(date: str) -> bool: + """ + Check if a given date is present in the database + """ + connection = utils.connect() + cursor = connection.cursor() + + cursor.execute("SELECT * FROM command_stats WHERE day = %s", (date,)) + res = cursor.fetchone() + + if res: + return True + + return False + + +def _add_date(date: str): + """ + Add a date into the db + """ + connection = utils.connect() + cursor = connection.cursor() + + cursor.execute("INSERT INTO command_stats(day, amount) VALUES (%s, 1)", (date,)) + connection.commit() + + +def _update(date: str): + """ + Increase the counter for a given day + """ + # Date wasn't present yet, add it with a value of 1 + if not _is_present(date): + _add_date(date) + return + + connection = utils.connect() + cursor = connection.cursor() + + cursor.execute(""" + UPDATE command_stats + SET amount = amount + 1 + WHERE day = %s + """, (date,)) + connection.commit() + + +def _get_all(): + """ + Get all rows + """ + connection = utils.connect() + cursor = connection.cursor() + + cursor.execute("SELECT * FROM command_stats") + return cursor.fetchall() diff --git a/ignored.md b/ignored.md index a8d3867..9ce1bdf 100644 --- a/ignored.md +++ b/ignored.md @@ -10,12 +10,6 @@ Contains the application's token to connect to Discord. You can create your own token_goes_here -### files/commands.json - -Contains info on every command's usage. These are dynamically added, so this is just an emtpy json file. - - {} - ### files/database.json Contains the credentials needed to connect to the PSQL database. This is ignored so that I don't have to leak my IP address, but also so that you can set up a local database to mess around without affecting the Live one or having to change any code.