diff --git a/main.py b/main.py index c4e2310..45c56b3 100644 --- a/main.py +++ b/main.py @@ -27,11 +27,7 @@ def connect_db(): sys.exit(1) def recruit_update(member, recruit, cur, conn): - if member.nick is None: - nick = member.name - else: - nick = member.nick - cur.execute("INSERT INTO recruits (discord_id, nickname, recruit) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE nickname=?, recruit=?;", (member.id, nick, recruit, nick, recruit)) + cur.execute("INSERT INTO recruits (discord_id, nickname, recruit) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE nickname=?, recruit=?;", (member.id, member.display_name, recruit, member.display_name, recruit)) conn.commit() @@ -48,21 +44,67 @@ cur = conn.cursor() # create Slash Command group with bot.create_group settings = bot.create_group("set", "Einstellungen") -@settings.command() -@discord.commands.default_permissions(manage_roles=True) -async def channel_voting(ctx): + +def get_count_recruits(): + cur.execute("SELECT count(*) FROM recruits WHERE recruit=1") + count = cur.fetchone()[0] + return count + +def build_option_list(): + cur.execute("SELECT discord_id, nickname, recruit FROM recruits WHERE recruit=1") + options = [] + records = cur.fetchall() + for row in records: + options.append(discord.SelectOption(value=str(row[0]), label=str(row[1]))) + return options + + +class Yes_select(discord.ui.View): + @discord.ui.select( # the decorator that lets you specify the properties of the select menu + placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected + min_values = 1, # the minimum number of values that must be selected by the users + max_values = get_count_recruits(), # the maximum number of values that can be selected by the users + options = build_option_list() + ) + async def select_callback(self, select, interaction): # the function called when the user is done selecting options + await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") + +def create_yes_embed(): + embed = discord.Embed( + title="Rekrutenbesichtigung: Ja-Stimme", + description="Geb hier deine Ja-Stimme für einen Rekruten ab!", + color=discord.Colour.green(), + ) + return embed + + +async def send_yes_message(channel): + message = await channel.send(embed=create_yes_embed(), view=Yes_select()) + cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'message_voting_yes'", (message.id, )) + +async def edit_yes_message(): + cur.execute("SELECT value FROM settings WHERE name='channel_voting'") + channel = bot.get_channel(int(cur.fetchone()[0])) + cur.execute("SELECT value FROM settings WHERE name='message_voting_yes'") + message = await channel.fetch_message(int(cur.fetchone()[0])) + await message.edit(embed=create_yes_embed(), view=Yes_select()) + +@settings.command(description="Sendet die Nachricht zum Abstimmen in den aktuellen Channel.") +@default_permissions(manage_roles=True) +async def message_voting(ctx): cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'channel_voting'", (ctx.channel_id, )) + await send_yes_message(ctx.channel) conn.commit() await ctx.respond(f"Done.", ephemeral=True) -@settings.command() +@settings.command(description="Sendet den Report in den aktuellen Kanal.") @default_permissions(manage_roles=True) -async def channel_report(ctx): +async def message_report(ctx): cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'channel_report'", (ctx.channel_id, )) conn.commit() await ctx.respond(f"Done.", ephemeral=True) -@settings.command() +@settings.command(description="Setzt die ID der Rekruten-Rolle") @default_permissions(manage_roles=True) async def role_recruit( ctx, @@ -72,7 +114,7 @@ async def role_recruit( conn.commit() await ctx.respond(f"Done.", ephemeral=True) -@settings.command() +@settings.command(description="Setzt den Discord-Server") @default_permissions(manage_roles=True) async def guild(ctx): cur.execute("UPDATE settings SET VALUE = ? WHERE name = 'guild'", (ctx.guild_id, )) @@ -84,7 +126,7 @@ def check_roles(member, recruit_id): if role.id == recruit_id: return "Yes" -@settings.command() +@settings.command(description="Aktualisiert die internen Daten.") @default_permissions(manage_roles=True) async def refresh(ctx): cur.execute("SELECT value FROM settings WHERE name='guild'") @@ -92,8 +134,7 @@ async def refresh(ctx): guild_id = cur.fetchone() guild_id = guild_id[0] cur.execute("SELECT value FROM settings WHERE name='role_recruit'") - recruit_id = cur.fetchone() - recruit_id = recruit_id[0] + recruit_id = cur.fetchone()[0] guild = bot.get_guild(guild_id) for role in guild.roles: if role.id == recruit_id: @@ -102,21 +143,12 @@ async def refresh(ctx): for member in guild.members: result = check_roles(member, recruit_id) if result == "Yes": - None + pass else: - if member.nick is None: - nick = member.name - else: - nick = member.nick - cur.execute("UPDATE recruits SET recruit = ? WHERE discord_id = ?", (0, member.id)) + cur.execute("UPDATE recruits SET recruit = ?, nickname = ? WHERE discord_id = ?", (0, member.display_name, member.id)) conn.commit() await ctx.respond(f"Done.", ephemeral=True) - - - - - @bot.event async def on_member_update(previous, after): cur.execute("SELECT value FROM settings WHERE name='role_recruit'")