From f96be2d7f3752a6b473cc020067cb70f2021e255 Mon Sep 17 00:00:00 2001 From: jmueller Date: Tue, 12 Dec 2023 19:40:13 +0100 Subject: [PATCH] Added Refresh of Software --- main.py | 64 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/main.py b/main.py index 217bcee..9d17460 100644 --- a/main.py +++ b/main.py @@ -51,6 +51,7 @@ async def on_ready(): no_select_inst50 = No_select50() bot.add_view(no_select_inst50) bot.add_view(delete_and_view_votes_message()) + bot.add_view(report_buttons()) print(f"{bot.user} is ready and online!") conn = connect_db() @@ -114,6 +115,7 @@ async def send_yes_confirm(select, interaction): description=message, color=discord.Colour.green(), ) + await edit_report_message() await interaction.response.send_message(embed=embed, ephemeral=True) @@ -244,6 +246,7 @@ def insert_no_vote(recruit_id, voter_id, reason): cur.execute("SELECT nickname FROM recruits WHERE discord_id = ?", (recruit_id, )) return cur.fetchone()[0] + class No_reason(discord.ui.Modal): recruit_name = "" recruit_id = "" @@ -253,6 +256,7 @@ class No_reason(discord.ui.Modal): async def callback(self, interaction: discord.Interaction): insert_no_vote(self.recruit_id, interaction.user.id, self.children[0].value) + await edit_report_message() message = ("Du hast deine Nein-Stimme erfolgreich abgegeben.\n **Hinweis:** Die Rekrutierungsleiter werden sich demnächst bei dir melden.") embed = discord.Embed( title="Aktion abgeschlossen", @@ -594,7 +598,23 @@ async def message_voting(ctx): conn.commit() await ctx.respond(f"Done.", ephemeral=True) -async def create_report_embed(): +class report_buttons(discord.ui.View): + def __init__(self): + super().__init__(timeout=None) + @discord.ui.button(label="Auswertung pro Rekrut", style=discord.ButtonStyle.primary, row=1, custom_id="report_buttons_pro_person") + async def report_per_recruit(self, button, interaction): + await interaction.response.send_message("You clicked the button!") + + @discord.ui.button(label="Rekruten auschecken", style=discord.ButtonStyle.primary, row=1, custom_id="report_buttons_checkout") + async def checkout_recruits(self, button, interaction): + await interaction.response.send_message("You clicked the button!") + + @discord.ui.button(label="Daten aktualisieren", style=discord.ButtonStyle.secondary, row=2, custom_id="report_buttons_refresh") + async def refresh_button(self, button, interaction): + await interaction.response.send_message(content="Refresh angestoßen! Dies dauert einen kleinen Moment.", ephemeral=True) + await process_refresh() + +def create_report_embed(): embed = discord.Embed( title="Aktuelle Stimmen", color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from @@ -603,23 +623,28 @@ async def create_report_embed(): recruits = cur.fetchall() description = "" cur.execute("SELECT value FROM settings WHERE name = ?", ("guild", )) - guild_id = cur.fetchone() + guild_id = cur.fetchone()[0] guild = bot.get_guild(guild_id) for recruit in recruits: if recruit[2] != 0: - cur.execute("SELECT reason, discord_id_voter FROM no_votes WHERE discord_id_recruit = ?", (recruits[3])) - no_votes = cur.fetchone() - description = description + "**" + recruit[0] + ":**" + recruit[1] + "Ja, " + recruit[2] + "Nein.\n" + cur.execute("SELECT reason, discord_id_voter FROM no_votes WHERE discord_id_recruit = ?", (recruit[3], )) + no_votes = cur.fetchall() + description = description + "**" + recruit[0] + ":** " + str(recruit[1]) + " Ja, " + str(recruit[2]) + " Nein.\n" for no_vote in no_votes: - description = description + "Begründung von " + guild.get_member(no_vote[1]).display_name + ": " + no_vote[0] + "\n\n" + description = description + "Begründung von " + guild.get_member(no_vote[1]).display_name + ": " + no_vote[0] + description = description + "\n\n" else: - description = description + "**" + recruit[0] + ":**" + recruit[1] + "Ja, " + recruit[2] + "Nein.\n" + description = description + "**" + recruit[0] + ":** " + str(recruit[1]) + " Ja, " + str(recruit[2]) + " Nein.\n" + embed.description = description return embed @settings.command(description="Sendet den Report in den aktuellen Kanal.") @default_permissions(manage_roles=True) async def message_report(ctx): cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'channel_report'", (ctx.channel_id, )) + channel = ctx.channel + message = await channel.send(embed=create_report_embed(), view=report_buttons()) + cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'message_report'", (message.id, )) conn.commit() await ctx.respond(f"Done.", ephemeral=True) @@ -645,10 +670,7 @@ def check_roles(member, recruit_id): if role.id == recruit_id: return "Yes" -@settings.command(description="Aktualisiert die internen Daten.") -@default_permissions(manage_roles=True) -async def refresh(ctx): - await ctx.respond(f"Refresh angestoßen! Dies dauert einen kleinen Moment.", ephemeral=True) +async def process_refresh(): cur.execute("SELECT value FROM settings WHERE name='guild'") guild_id = cur.fetchone() guild_id = guild_id[0] @@ -664,17 +686,32 @@ async def refresh(ctx): if result == "Yes": pass else: - cur.execute("UPDATE recruits SET recruit = ?, nickname = ? WHERE discord_id = ?", (0, member.display_name, member.id)) + cur.execute("UPDATE recruits SET recruit = ?, nickname = ? WHERE discord_id = ?", + (0, member.display_name, member.id)) conn.commit() cur.execute("SELECT discord_id FROM recruits WHERE recruit = 1") recruits = cur.fetchall() for recruit in recruits: member = guild.get_member(recruit[0]) if member is None: - cur.execute("UPDATE recruits SET recruit = 0 WHERE discord_id = ?", (recruit[0], )) + cur.execute("UPDATE recruits SET recruit = 0 WHERE discord_id = ?", (recruit[0],)) conn.commit() await edit_yes_message() await edit_no_message() + await edit_report_message() + +async def edit_report_message(): + cur.execute("SELECT value FROM settings WHERE name='channel_report'") + channel = bot.get_channel(int(cur.fetchone()[0])) + cur.execute("SELECT value FROM settings WHERE name='message_report'") + message = await channel.fetch_message(int(cur.fetchone()[0])) + await message.edit(embed=create_report_embed(), view=report_buttons()) + +@settings.command(description="Aktualisiert die internen Daten.") +@default_permissions(manage_roles=True) +async def refresh(ctx): + await process_refresh(ctx) + await ctx.respond(f"Refresh angestoßen! Dies dauert einen kleinen Moment.", ephemeral=True) @bot.event @@ -698,6 +735,7 @@ async def on_member_update(previous, after): break await edit_yes_message() await edit_no_message() + await edit_report_message() bot.run(os.getenv('TOKEN')) # run the bot with the token