index — Deutsche-Haus-Bot @ 914b003bdfe103ed70bcea8d989ac76051ee20d3

Discord bot to dynamically create voice chats for clubs that boosters can create

feat: edit clubs
crispy-caesus crispy@crispy-caesus.eu
Fri, 21 Nov 2025 00:21:57 +0100
commit

914b003bdfe103ed70bcea8d989ac76051ee20d3

parent

bf2c3f9e75b6733449b26987a754d19c9cb05c43

2 files changed, 72 insertions(+), 15 deletions(-)

jump to
M bot.pybot.py

@@ -203,23 +203,23 @@

async def check_club_parameters(ctx, db: database.Database, channelName="", channelEmoji="", roleName="", roleColor=""): if channelEmoji != "": if len(channelEmoji) != 1: - ctx.respond( + await ctx.respond( "❌ Error! Das Emoji-Feld darf nicht länger oder kürzer als 1 sein") return if emoji.is_emoji(channelEmoji) is not True: - ctx.respond( + await ctx.respond( "❌ Error! Das Emoji-Feld muss mit einem Emoji gefüllt werden") return if channelName != "": if emoji.emoji_count(channelName) > 0: - ctx.respond("❌ Error! Der Kanalname darf keine Emojis enthalten") + await ctx.respond("❌ Error! Der Kanalname darf keine Emojis enthalten") return combined_channel_name = f"「{channelEmoji}」{channelName}" existing_club = await db.select_club_by_channel_name(combined_channel_name) if existing_club is not None: - ctx.respond( + await ctx.respond( "❌ Error! Es gibt bereits einen Club mit diesem Kanalnamen") return

@@ -242,7 +242,7 @@ return (roleName, roleColor)

@bot.slash_command(description="Erstellt einen Booster Club") -async def club_hinzufügen(ctx, kanalname, kanalemoji, rollenname, rollenfarbe): +async def club_erstellen(ctx, kanalname, kanalemoji, rollenname, rollenfarbe): db = await init_db(ctx) kanalemoji = kanalemoji.strip()

@@ -284,17 +284,66 @@ @bot.slash_command(description="Ändern eines Paramaters seines Clubs")

async def club_editieren(ctx, kanalname="", kanalemoji="", rollenname="", rollenfarbe=""): db = await init_db(ctx) owner_id = ctx.author.id + + if type(await db.select_role_id_by_owner(owner_id)) != int: + ctx.respond(f":x: Du besitzt keinen Club") + if kanalname != "": - await db.club_edit(owner_id, "channel_name", kanalname) + channel_name = await db.get_channel_name_by_owner(ctx.author.id) + check_return = await check_club_parameters(ctx, db, channelName=kanalname, channelEmoji=channel_name[:3]) + if check_return == None: + return + response = await db.club_edit(owner_id, "channel_name", channel_name[:3]+kanalname) if kanalemoji != "": - pass - if rollenname != "": - pass - if rollenfarbe != "": - pass + channel_name = await db.get_channel_name_by_owner(ctx.author.id) + check_return = await check_club_parameters(ctx, db, channelName=channel_name[3:], channelEmoji=kanalemoji) + if check_return == None: + return + response = await db.club_edit(owner_id, "channel_name", f"「{kanalemoji}」{channel_name[3:]}") + if rollenname != "" or rollenfarbe != "": + check_return = await check_club_parameters(ctx, db, roleName=rollenname, roleColor=rollenfarbe) + if check_return == None: + return + + club_role_id = await db.select_role_id_by_owner(owner_id) + role = discord.utils.get(ctx.guild.roles, id=club_role_id) + + # Check if the role exists + if role is None: + await error(ctx, f"Club-Edit: Role {club_role_id} could not be found") + return + + # Attempt to edit the role + try: + if rollenname != "": + if rollenfarbe != "": + await role.edit(name=check_return[0], colour=check_return[1]) + else: + await role.edit(name=check_return[0]) + else: + await role.edit(colour=check_return[1]) + + await ctx.respond(f":white_check_mark: Rolle {role.name} geupdated") + await log(ctx, f"role '{role.name}' has been edited by {ctx.author}") + except discord.Forbidden: + await error(ctx, f"Club-Edit: No permission to edit role ({club_role_id})") + return + except discord.HTTPException as e: + await error(ctx, "Club-Edit: Error when editing role", e) + return + + if check_return[0] != "": + response = await db.club_edit(owner_id, "role_name", check_return[0]) + + if response != None: + await error(ctx, "Error, editing club", response) + else: + await ctx.respond(f"✅ Club editiert!") # ========================= dsfsf ======================= # +async def add_header_role(ctx): + pass @bot.slash_command(description="Fügt Member zu eigenem Club hinzu") async def mitglied_hinzufuegen(ctx, member):

@@ -486,12 +535,13 @@ if club_role_id is None:

await ctx.respond(":x: Der angegebene Benutzer besitzt keinen Club") return + #TODO: db should only be updated once role deletion is successful err = await db.delete_club(owner) if err is not None: await error(ctx, "Club-Deletion: Club from {owner} could not be deleted from the db", err) return else: - print(f"LOG: club from {owner} has been deleted from the db") + await log(ctx, f"club from {owner} has been deleted from the db") role = discord.utils.get(ctx.guild.roles, id=club_role_id)

@@ -504,7 +554,7 @@ # Attempt to delete the role

try: await role.delete() await ctx.respond(f":white_check_mark: Rolle {role.name} und Club von <@{owner}> wurden gelöscht") - print(f"LOG: role '{role.name}' has been deleted by {ctx.author}") + await log(ctx, f"role '{role.name}' has been deleted by {ctx.author}") except discord.Forbidden: await error(ctx, f"Club-Deletion: No permission to delete role ({club_role_id})") return
M db.pydb.py

@@ -112,7 +112,7 @@ return row

async def create_club(self, channel_name: str, owner: int, role_id: int, role_name: str): - #print(f"DB: create_club received:\n channel_name: {channel_name}\n owner: {owner}\n role_id: {role_id}") + print(f"DB: create_club received:\n channel_name: {channel_name}\n owner: {owner}\n role_id: {role_id}") args = (channel_name, owner, role_id, role_name) sql = """INSERT INTO clubs (channel_name,owner_id,role_id,role_name) VALUES(?,?,?,?);"""

@@ -127,7 +127,7 @@ # ============================ EDIT CLUB ========================== #

async def club_edit(self, owner_id: int, column: str, value: str): - #print(f"DB: updating club:\n owner_id: {owner_id}\n column: {column}\n value: {value}") + print(f"DB: updating club:\n owner_id: {owner_id}\n column: {column}\n value: {value}") async with aiosqlite.connect(self.db_name) as db: try: await db.execute(f"UPDATE clubs SET {column} = ? WHERE owner_id = ?;", (value, owner_id))

@@ -218,3 +218,10 @@ async def delete_club(self, owner_id):

async with aiosqlite.connect(self.db_name) as db: await db.execute("DELETE FROM clubs WHERE owner_id = ?", (owner_id,)) await db.commit() + + async def get_channel_name_by_owner(self, owner_id): + async with aiosqlite.connect(self.db_name) as db: + async with db.execute("SELECT channel_name FROM clubs WHERE owner_id = ?;", (owner_id, )) as cursor: + result = await cursor.fetchone() + return (result[0]) +