From 6cb32991820f867a7844dc41910a4fdeca1d7970 Mon Sep 17 00:00:00 2001 From: robertsokola Date: Wed, 17 Nov 2021 16:18:53 +0100 Subject: [PATCH] =?UTF-8?q?Oprava=20bugu=20s=20datab=C3=A1z=C3=AD,=20check?= =?UTF-8?q?up=20datab=C3=A1ze=20zv=C3=BD=C5=A1en=20z=205=20sekund=20na=201?= =?UTF-8?q?=20minutu,=20vylep=C5=A1en=20try=20except=20ve=20main.py=20soub?= =?UTF-8?q?oru=20a=20updatov=C3=A1n=20k=C3=B3d=20na=20python=203.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cogs/event.py | 136 ++++++++++-------- cogs/poll.py | 8 +- cogs/statictics.py | 36 ----- cogs/utility.py | 65 --------- db_folder/__init__.py | 2 +- db_folder/{mysqlwrapper.py => sqldatabase.py} | 2 +- "fotky/J\303\241chym.png" | Bin 0 -> 53296 bytes main.py | 2 +- readme.md | 11 +- text_json/stats_all_guilds.json | 0 10 files changed, 89 insertions(+), 173 deletions(-) delete mode 100644 cogs/statictics.py rename db_folder/{mysqlwrapper.py => sqldatabase.py} (98%) create mode 100644 "fotky/J\303\241chym.png" delete mode 100644 text_json/stats_all_guilds.json diff --git a/cogs/event.py b/cogs/event.py index 4da6d31..746fdc7 100644 --- a/cogs/event.py +++ b/cogs/event.py @@ -4,11 +4,12 @@ import discord from discord.ext import commands, tasks -from db_folder.mysqlwrapper import MySQLWrapper +from db_folder.sqldatabase import SQLDatabase class EventSystem(commands.Cog): """Class for event system, creating pools and sending a message on exact day""" + def __init__(self, bot): self.bot = bot self.caching = set() @@ -30,7 +31,7 @@ def __init__(self, bot): # Caching systém, oproti caching systému ve poll.py se tento vždy smaže pokud je event odeslán a zpracován. @tasks.loop(minutes=30) async def cache(self): - with MySQLWrapper() as db: + with SQLDatabase() as db: query = "SELECT `EventEmbedID` FROM `EventPlanner`" tuples = db.query(query=query) @@ -45,10 +46,11 @@ async def cache(self): async def before_cache(self): await self.bot.wait_until_ready() - # Ověřuje databázi jestli něco není starší než dané datum a pak jej pošle. - @tasks.loop(seconds=5.0) + # Ověřuje databázi jestli něco není starší než dané datum a pak jej pošle. Změněno na 1 minutu, něco mi tam shazuje + # connection k databázi + @tasks.loop(minutes=1) async def send_events(self): - with MySQLWrapper() as db: + with SQLDatabase() as db: sql = "SELECT * FROM EventPlanner;" result = db.query(query=sql) @@ -115,7 +117,7 @@ async def before_send_events(self): for table_name in tables: table_description = tables[table_name] - with MySQLWrapper() as db: + with SQLDatabase() as db: db.execute(query=table_description, commit=True) await self.bot.wait_until_ready() @@ -133,6 +135,8 @@ async def udalost(self, ctx): @udalost.command() async def create(self, ctx, title, description, eventdatetime): + await ctx.message.delete() + try: datetime_formatted = datetime.datetime.strptime(eventdatetime, '%d.%m.%Y %H:%M') @@ -173,7 +177,7 @@ async def create(self, ctx, title, description, eventdatetime): ) VALUES (%s, %s, %s, %s, %s, %s)""" val = (ctx.guild.id, sent.id, title, description, datetime_formatted, ctx.channel.id) - with MySQLWrapper() as db: + with SQLDatabase() as db: db.execute(sql, val, commit=True) self.caching.add(sent.id) @@ -186,7 +190,7 @@ async def vypis(self, ctx): WHERE GuildID = %s ORDER BY EventDate; """ - with MySQLWrapper() as db: + with SQLDatabase() as db: result = db.query(query=sql, val=(ctx.guild.id,)) embed = discord.Embed(title="Výpis všech událostí", colour=discord.Colour.gold()) @@ -201,7 +205,7 @@ async def vypis(self, ctx): # Smaže event z databáze pomocí ID embedu. Přijít na lepší způsob? @udalost.command(aliases=["delete"]) async def smazat(self, ctx, embed_id: str): - with MySQLWrapper() as db: + with SQLDatabase() as db: try: sql = "DELETE FROM EventPlanner WHERE EventEmbedID = %s;" db.execute(sql, (embed_id,), commit=True) @@ -228,39 +232,41 @@ async def on_raw_reaction_add(self, payload: discord.RawReactionActionEvent): async for user in reaction.users() if not user.id == self.bot.user.id] - if payload.emoji.name == "✅": - edit = embed.set_field_at( - 1, - name="Ano, pojedu:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", - inline=False) - await reaction.message.edit(embed=edit) + match payload.emoji.name: + case "✅": + edit = embed.set_field_at( + 1, + name="Ano, pojedu:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", + inline=False) - sql = """ INSERT INTO `ReactionUsers` ( - EventEmbedID, - ReactionUser) - VALUES (%s, %s) - """ - val = (payload.message_id, payload.user_id) + await reaction.message.edit(embed=edit) - with MySQLWrapper() as db: - db.execute(sql, val, commit=True) + sql = """ INSERT INTO `ReactionUsers` ( + EventEmbedID, + ReactionUser) + VALUES (%s, %s)""" + val = (payload.message_id, payload.user_id) - if payload.emoji.name == "❌": - edit = embed.set_field_at( - 2, - name="Ne, nejedu:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) + with SQLDatabase() as db: + db.execute(sql, val, commit=True) - await reaction.message.edit(embed=edit) + case "❌": + edit = embed.set_field_at( + 2, + name="Ne, nejedu:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", + inline=False) - if payload.emoji.name == "❓": - edit = embed.set_field_at( - 3, - name="Ještě nevím:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) + await reaction.message.edit(embed=edit) - await reaction.message.edit(embed=edit) + case "❓": + edit = embed.set_field_at( + 3, + name="Ještě nevím:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) + + await reaction.message.edit(embed=edit) @commands.Cog.listener() async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent): @@ -275,29 +281,41 @@ async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent): async for user in reaction.users() if not user.id == self.bot.user.id] - if payload.emoji.name == "✅": - edit = embed.set_field_at( - 1, - name="Ano, pojedu:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) - - await reaction.message.edit(embed=edit) - - if payload.emoji.name == "❌": - edit = embed.set_field_at( - 2, - name="Ne, nejedu:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) - - await reaction.message.edit(embed=edit) - - if payload.emoji.name == "❓": - edit = embed.set_field_at( - 3, - name="Ještě nevím:", - value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) - - await reaction.message.edit(embed=edit) + match payload.emoji.name: + case "✅": + edit = embed.set_field_at( + 1, + name="Ano, pojedu:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", + inline=False) + + await reaction.message.edit(embed=edit) + + sql = """ INSERT INTO `ReactionUsers` ( + EventEmbedID, + ReactionUser) + VALUES (%s, %s)""" + val = (payload.message_id, payload.user_id) + + with SQLDatabase() as db: + db.execute(sql, val, commit=True) + + case "❌": + edit = embed.set_field_at( + 2, + name="Ne, nejedu:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", + inline=False) + + await reaction.message.edit(embed=edit) + + case "❓": + edit = embed.set_field_at( + 3, + name="Ještě nevím:", + value=f"{len(vypis_hlasu)} | {', '.join(vypis_hlasu)}", inline=False) + + await reaction.message.edit(embed=edit) def setup(bot): diff --git a/cogs/poll.py b/cogs/poll.py index e1087cc..d4f481a 100644 --- a/cogs/poll.py +++ b/cogs/poll.py @@ -3,7 +3,7 @@ import discord from discord.ext import commands, tasks -from db_folder.mysqlwrapper import MySQLWrapper +from db_folder.sqldatabase import SQLDatabase class Poll(commands.Cog): @@ -85,7 +85,7 @@ async def anketa(self, ctx, question, *answer: str): for reaction in reactions[:len(answer)]: await sent.add_reaction(reaction) - with MySQLWrapper() as db: + with SQLDatabase() as db: sql = "INSERT INTO `Poll`(PollID, DateOfPoll) VALUES (%s, %s)" val = (sent.id, datetime.datetime.now()) @@ -104,7 +104,7 @@ async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent): # Caching systém pro databázi, ať discord bot nebombarduje furt databázi a vše udržuje ve své paměti @tasks.loop(minutes=30) async def cache(self): - with MySQLWrapper() as db: + with SQLDatabase() as db: # Query pro to, aby se každý záznam, který je starší než měsíc, smazal query2 = "DELETE FROM `Poll` WHERE `DateOfPoll` < CURRENT_DATE - 30;" db.execute(query2, commit=True) @@ -122,7 +122,7 @@ async def cache(self): @cache.before_loop async def before_cache(self): - with MySQLWrapper() as db: + with SQLDatabase() as db: query = """ CREATE TABLE IF NOT EXISTS `Poll` ( ID_Row INT NOT NULL AUTO_INCREMENT, diff --git a/cogs/statictics.py b/cogs/statictics.py deleted file mode 100644 index 4934cbe..0000000 --- a/cogs/statictics.py +++ /dev/null @@ -1,36 +0,0 @@ -from discord.ext import commands - -from db_folder.mysqlwrapper import MySQLWrapper - - -# import matplot / pandas -# TODO: Look more into which module is better here - -class Statictics(commands.Cog): - def __init__(self, bot): - self.bot = bot - - self.caching = set() - - # Prepare the table in database - @commands.Cog.listener() - async def on_ready(self): - sql = """ - CREATE TABLE IF NOT EXISTS `Messages`( - GuildID VARCHAR(255) NOT NULL, - User VARCHAR(255) NOT NULL, - CountMessages INT NOT NULL, - PRIMARY KEY (User)) - """ - with MySQLWrapper() as db: - db.execute(sql, commit=True) - - @commands.Cog.listener() - async def on_message(self, message): - if message.author == self.bot.user: - pass - - - -def setup(bot): - bot.add_cog(Statictics(bot)) diff --git a/cogs/utility.py b/cogs/utility.py index c8c3a0f..b0b4a44 100644 --- a/cogs/utility.py +++ b/cogs/utility.py @@ -42,71 +42,6 @@ async def rozcestnik(self, ctx): async def ping(self, ctx): await ctx.send('Odezva je takováhle: {} ms'.format(round(self.bot.latency * 1000))) - # TODO: Vše co je pod tímto vylepšit nebo pořešit lépe! - - @commands.command(pass_context=True) - async def vypis(self, ctx): - embed = discord.Embed(title="Výpis všech členů na discordu", timestamp=ctx.message.created_at, color=0xff0000) - - embed.add_field(name="Členové", - value=", ".join([x.display_name for x in ctx.message.guild.members if not x.bot])) - - embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) - embed.set_footer(text=self.bot.user.name, icon_url=self.bot.user.avatar_url) - - await ctx.send(embed=embed) - - @commands.command(pass_context=True) - async def userinfo(self, ctx, user: discord.Member): - list_members = ctx.guild.members - if user in list_members: - - roles = [role for role in user.roles] - - embed = discord.Embed(title="Uživatelské informace", timestamp=ctx.message.created_at, - colour=discord.Color.gold()) - embed.set_author(name=user.display_name, icon_url=user.avatar_url) - embed.set_thumbnail(url=user.avatar_url) - embed.set_footer(text="Jáchym", icon_url=self.bot.user.avatar_url) - - fields = [ - ("Jméno", str(user), False), - ("ID", user.id, False), - (f"Role ({len(roles) - 1})", - ", ".join([str(role) for role in user.roles if role != ctx.guild.default_role]), False), - ("Vytvořen účet:", user.created_at.strftime("%d.%m.%Y"), False), - ("Připojil se:", user.joined_at.strftime("%d.%m.%Y %H:%M:%S"), False)] - - for name, value, inline in fields: - embed.add_field(name=name, value=value, inline=inline) - - await ctx.send(embed=embed) - - else: - await ctx.send('Musíš někoho pingnout z tohoto serveru!') - - @commands.command(pass_context=True) - async def serverinfo(self, ctx): - role_count = len(ctx.guild.roles) - list_of_bots = [bot.mention for bot in ctx.guild.members if bot.bot] - member_count = len([m for m in ctx.guild.members if not m.bot]) - - embed = discord.Embed(timestamp=ctx.message.created_at, color=ctx.author.color) - embed.add_field(name='Jméno', value=f"{ctx.guild.name}", inline=False) - embed.add_field(name='Hlavní vedoucí', value=f"{ctx.message.guild.owner.display_name} 👑", inline=False) - embed.add_field(name='Vertifikační level', value=str(ctx.guild.verification_level), inline=False) - embed.add_field(name='Nejvyšší role', value=ctx.guild.roles[-2], inline=False) - - embed.add_field(name='Celkem rolí', value=str(role_count), inline=False) - embed.add_field(name='Celkem členů beze botů', value=f"{member_count}", inline=False) - embed.add_field(name='Botové:', value=(', '.join(list_of_bots))) - embed.add_field(name='Vytvořeno', value=ctx.guild.created_at.strftime('%d.%m.%Y'), inline=False) - embed.set_thumbnail(url=ctx.guild.icon_url) - embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) - embed.set_footer(text=self.bot.user.name, icon_url=self.bot.user.avatar_url) - - await ctx.send(embed=embed) - @commands.command(pass_context=True, aliases=["smazat"]) @has_permissions(administrator=True) async def clear(self, ctx, limit: int): diff --git a/db_folder/__init__.py b/db_folder/__init__.py index 4760ee9..96f5034 100644 --- a/db_folder/__init__.py +++ b/db_folder/__init__.py @@ -1 +1 @@ -from db_folder.mysqlwrapper import MySQLWrapper +from db_folder.sqldatabase import SQLDatabase diff --git a/db_folder/mysqlwrapper.py b/db_folder/sqldatabase.py similarity index 98% rename from db_folder/mysqlwrapper.py rename to db_folder/sqldatabase.py index fa6c205..f290b96 100644 --- a/db_folder/mysqlwrapper.py +++ b/db_folder/sqldatabase.py @@ -11,7 +11,7 @@ DATABASE = getenv("DATABASE") -class MySQLWrapper: +class SQLDatabase: """ Small wrapper for mysql.connector, so I can use magic with statement. Because readibility counts! """ diff --git "a/fotky/J\303\241chym.png" "b/fotky/J\303\241chym.png" new file mode 100644 index 0000000000000000000000000000000000000000..77b0ca63d4b7cd153c38cf85f7d6c0284b322d67 GIT binary patch literal 53296 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

{eNwzP?SUdm0 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 d|7R;u*uO0;F;#*7YdVz@H6^X* -Zatím pozastaveno! +Logo Jáchyma
Jáchym @@ -87,10 +88,8 @@ ___ Protože je Jáchym stále ve procesu developementu, jsou věci, které jsou třeba dodělat. Momentálně to jsou tyto věci: -- [ ] Lépe pořešit tabulky v databázi a relace mezi nimi. Vyvarovat se opakování záznamů -- [ ] Statistiky serveru přes matplot nebo jiný modul -- [ ] Fun commands? -- [ ] Napsat dokumentaci jak mít self-hosted bota. +- [ ] Slash commands +- [ ] Úprava všech commandů, použití PyCordu místo discord.py ...další přibudou, až mě napadnou další věci, co budou potřeba udělat. Pokud si myslíte že něco není v pořádku a je to potřeba upravit, neváhejte napsat do issues. @@ -116,5 +115,5 @@ ___ ...se tento bot jmenuje Jáchym, zanechávám hlášku z filmu! -Béda: „Hele, já jsem jí včera, to my to ještě myslelo, složil básničku.” (odkašle si a recituje) „Růže - k lásce +Béda: „Hele, já jsem jí včera, to mi to ještě myslelo, složil básničku.” (odkašle si a recituje) „Růže - k lásce schůdeček, s úctou Béda Hudeček...” František: „Teda, to jsi složil sám? Teda, to jsi hotovej ten... básník...” diff --git a/text_json/stats_all_guilds.json b/text_json/stats_all_guilds.json deleted file mode 100644 index e69de29..0000000