From 97f6aa105db424e3bb9ebf9d1f9a1645acef4082 Mon Sep 17 00:00:00 2001 From: Stijn De Clercq Date: Tue, 3 Nov 2020 16:19:21 +0100 Subject: [PATCH 1/3] Add commands file to ignores --- .gitignore | 1 + ignored.md | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index df1d76e..75812b8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ 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/ignored.md b/ignored.md index 9ce1bdf..a8d3867 100644 --- a/ignored.md +++ b/ignored.md @@ -10,6 +10,12 @@ 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. From 119d7c8dcaa3d4a2bb70873a23431344d9c702a3 Mon Sep 17 00:00:00 2001 From: Stijn De Clercq Date: Wed, 4 Nov 2020 10:02:26 +0100 Subject: [PATCH 2/3] Add command stats call to on_command --- cogs/events.py | 2 ++ functions/commands.py | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 functions/commands.py diff --git a/cogs/events.py b/cogs/events.py index 7cea495..6373039 100644 --- a/cogs/events.py +++ b/cogs/events.py @@ -4,6 +4,7 @@ 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 import pytz import time import traceback @@ -95,6 +96,7 @@ 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) @commands.Cog.listener() async def on_command_error(self, ctx, err): diff --git a/functions/commands.py b/functions/commands.py new file mode 100644 index 0000000..2f62936 --- /dev/null +++ b/functions/commands.py @@ -0,0 +1,7 @@ +from discord.ext import commands + + +def updateFile(ctx: commands.Context): + prefix_used = ctx.prefix + command: commands.Command = ctx.command + pass From e56de111eb6febbe22d32ffb6483199e020dd3b6 Mon Sep 17 00:00:00 2001 From: Stijn De Clercq Date: Sat, 19 Jun 2021 17:45:26 +0200 Subject: [PATCH 3/3] List total commands per day instead of total usages per command --- .gitignore | 1 - cogs/events.py | 6 +-- databases.md | 7 +++ functions/commands.py | 7 --- functions/database/commands.py | 78 ++++++++++++++++++++++++++++++++++ ignored.md | 6 --- 6 files changed, 88 insertions(+), 17 deletions(-) delete mode 100644 functions/commands.py create mode 100644 functions/database/commands.py 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.