code got shit again BUT YOU CAN ADD CLUBS NOW
crispy-caesus 114518720+crispy-caesus@users.noreply.github.com
Mon, 12 Aug 2024 22:04:35 +0200
M
bot.py
→
bot.py
@@ -4,9 +4,13 @@ import bot_token
import db as database import logic +# ======================== STARTUP =========================== # + bot = discord.Bot() + role_converter = discord.ext.commands.RoleConverter() member_converter = discord.ext.commands.MemberConverter() + # ======================= INITIALIZATION ========================== #@@ -53,36 +57,40 @@ @discord.ext.commands.has_role()
async def """ +@bot.slash_command() async def get_existing_roles(ctx): results = ctx.guild.roles - return results + print(results) +@bot.slash_command() +async def test(ctx): + await ctx.guild.create_role(name = "hi", color=int("0x"+("#5460D9"[1:]), 16)+0x200, mentionable = False) + await ctx.respond("hi") + # ======================== add club ================================ # @bot.slash_command(description="Erstellt einen Booster Club") -@discord.ext.commands.has_role(1170646611332956208) async def club_hinzuftügen(ctx, kanalname, emoji, rollenname, rollenfarbe): - user = ctx.author.id - await logic.add_club(kanalname, emoji, rollenname, rollenfarbe, user) - - db = database.Database(f"{ctx.guild.id}.db") - await db.create_tables() - check = await db.check_if_club_creatable(kanalname, user) - if check != None: - await ctx.respond(check) + if ctx.author.get_role(await logic.add_club(ctx.guild.id, kanalname, emoji, rollenname, rollenfarbe, ctx.author.id, 1))== None: + await ctx.respond("Du bist kein Booster") return - - await ctx.guild.create_role(name=rollenname, color=0x5460D9, mentionable=False) + response = await logic.add_club(ctx.guild.id, kanalname, emoji, rollenname, rollenfarbe, ctx.author.id, 2) + if type(response) == str: + await ctx.respond(response) + return + else: + await ctx.guild.create_role(name = response[0], color = response[1], mentionable = False) role = await role_converter.convert(ctx, rollenname) - channel_name = f"[{emoji}]{kanalname}" - response = await db.create_club(channel_name, user, role.id) - if response == None: - await ctx.respond(f"{channel_name} created!") - else: + + response = await logic.add_club(ctx.guild.id, kanalname, emoji, rollenname, role.id, ctx.author.id, 3) + if response != None: await ctx.respond(response) + await ctx.respond("✅ Club erstellt!") + + @bot.slash_command(description="Fügt Member zu eigenem Club hinzu") async def mitglied_hinzufuegen(ctx, member):
M
db.py
→
db.py
@@ -6,7 +6,6 @@
def __init__(self, db_name: str): self.db_name = db_name - # ====================== INITIALIZATION ======================== # # could be done more flexibly somehow probably, receiving the schema from the logic.py, but ehhhhhhhhhhh (also not databse independent then) async def create_tables(self):@@ -15,7 +14,8 @@ await db.execute("""CREATE TABLE IF NOT EXISTS clubs (
id INTEGER PRIMARY KEY, channel_name TEXT NOT NULL UNIQUE, owner INTEGER NOT NULL UNIQUE, - role_id INTEGER NOT NULL UNIQUE);""") + role_id INTEGER NOT NULL UNIQUE, + role_name TEXT NOT NULL UNIQUE);""") await db.commit() await db.execute("""CREATE TABLE IF NOT EXISTS members ( id INTEGER PRIMARY KEY,@@ -58,31 +58,42 @@ return(None)
# =========================== create club =========================== # - async def check_if_club_creatable(self, channel_name, owner): + async def get_booster_role_id(self): + async with aiosqlite.connect(self.db_name) as db: + async with db.execute("SELECT discord_id FROM ids WHERE id_type = 'booster_role_id';") as cursor: + return((await cursor.fetchone())[0]) + + async def select_club_by_owner(self, owner_id): async with aiosqlite.connect(self.db_name) as db: - async with db.execute("SELECT owner FROM clubs WHERE owner = ?;", (owner,)) as cursor: + async with db.execute("SELECT * FROM clubs WHERE owner = ?;", (owner_id,)) as cursor: async for row in cursor: - if row != None: - return("Du hast bereits einen Club erstellt") - async with db.execute("SELECT channel_name FROM clubs WHERE channel_name = ?;", (channel_name,)) as cursor: + return row[0] + + async def select_club_by_channel_name(self, channel_name): + async with aiosqlite.connect(self.db_name) as db: + async with db.execute("SELECT * FROM clubs WHERE channel_name = ?;", (channel_name,)) as cursor: + async for row in cursor: + return row[0] + + async def select_club_by_role_name(self, role_name): + async with aiosqlite.connect(self.db_name) as db: + async with db.execute("SELECT * FROM clubs WHERE role_name = ?;", (role_name,)) as cursor: async for row in cursor: - if row != None: - return("Es existiert bereits ein Channel mit diesem Namen") - return None + return row[0] - async def create_club(self, channel_name: str, owner: int, role_id: int): + async def create_club(self, channel_name: str, owner: int, role_id: int, role_name: str): print(f"DB: received:\n channel_name: {channel_name}\n owner: {owner}\n role_id: {role_id}") - args = (channel_name, owner, role_id) - sql = """INSERT INTO clubs (channel_name,owner,role_id) - VALUES(?,?,?);""" + args = (channel_name, owner, role_id, role_name) + sql = """INSERT INTO clubs (channel_name,owner,role_id,role_name) + VALUES(?,?,?,?);""" try: async with aiosqlite.connect(self.db_name) as db: await db.execute(sql, args) await db.commit() except Error as e: print(e) - return("Error") + return("Error!") # ============================ add member ================================== #@@ -101,7 +112,7 @@ except Error as e:
print(e) return("Error") - async def select_club_by_owner(self, member: int): + async def select_role_id_by_owner(self, member: int): async with aiosqlite.connect(self.db_name) as db: async with db.execute("SELECT role_id FROM clubs WHERE owner = ?;", (member,)) as cursor: async for row in cursor:
M
logic.py
→
logic.py
@@ -1,14 +1,11 @@
import db as database - - # ========================= INITIALIZATION ========================= # async def on_guild_join(guild_id): db = database.Database(f"{guild_id}.db") - await db.create_tables() - + await db.create_tables() # ========================= SETUP ========================== #@@ -63,22 +60,41 @@
# ========================== ADD CLUB ======================== # -async def add_club(channel_name_without_emoji, emoji, role_name, color, owner_id): +async def add_club(guild_id: int, channel_name_without_emoji: str, emoji: str, role_name: str, color: str, owner_id: int, cycle: int): # ------------------------- check if club creatable ------------------------ # - existing_club_of_owner = db.get_club_by_owner(owner_id) - if existing_club_of_owner == None: - return("Du hast bereits einen Club") + db = database.Database(f"{guild_id}.db") + + match cycle: + case 1: # check if booster + return(await db.get_booster_role_id()) + + case 2: # check for ability to create given club + existing_club_of_owner = await db.select_club_by_owner(owner_id) + if existing_club_of_owner != None: + return("Error! Du hast bereits einen Club") - combined_channel_name = f"「{emoji}」{channel_name_without_emoji}" - existing_club = db.check_if_channel_exists(combined_channel_name) - if existing_club != None: - return("Es gibt bereits einen Club mit diesem Kanalnamen") + combined_channel_name = f"「{emoji}」{channel_name_without_emoji}" + existing_club = await db.select_club_by_channel_name(combined_channel_name) + if existing_club != None: + return("Error! Es gibt bereits einen Club mit diesem Kanalnamen") - existing_club_role = bot.check_if_role_exists(role_name) - if existing_club_role != None: - return("Es existiert bereits ein Club mit diesem Rollennamen") + existing_club_role = await db.select_club_by_role_name(role_name) + if existing_club_role != None: + return("Error! Es existiert bereits ein Club mit diesem Rollennamen") + + # create club on discord + if color[0] == '#': + color = color[1:] + try: + color = int("0x"+color, 16)+0x200 + except: + return("Error! Farbformat falsch angegeben") - existing_role + return(role_name, color) + + case 3: + return(await db.create_club(f"「{emoji}」{channel_name_without_emoji}", owner_id, int(color), role_name)) + # role id needed