index — Deutsche-Haus-Bot @ 357e2aced8e4d0a3f2082457729379a6961392b3

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

made deletable and distributor channel non staticw:
crispy-caesus 114518720+crispy-caesus@users.noreply.github
Sat, 19 Oct 2024 21:41:19 +0200
commit

357e2aced8e4d0a3f2082457729379a6961392b3

parent

a56afa3b397d9d8a7952e106aeb69d8a281a03c4

1 files changed, 62 insertions(+), 49 deletions(-)

jump to
M bot.pybot.py

@@ -16,7 +16,6 @@

role_converter = discord.ext.commands.RoleConverter() member_converter = discord.ext.commands.MemberConverter() - # ======================= INITIALIZATION ========================== # @bot.listen()

@@ -127,68 +126,82 @@ await ctx.respond(f"Pong! Latency is {bot.latency}")

# ==================== distributor vc ======================= # +distributor_vcs = [] + @bot.event async def on_voice_state_update(user, before, after): if before.channel != after.channel: - if after.channel and after.channel.id == 1052988388250226691: - print(f"{user.name} Joined The {after.channel.name} VC") - print(after.channel.members) - - db = database.Database(f"{after.channel.guild.id}.db") - + if after.channel: + db = database.Database(f"{after.channel.guild.id}.db") - db_response = await db.get_channel_name_role_name_by_member(user.id) - message = "Welchen Club-Kanal willst du öffnen?" - for i in range(len(db_response)): - message += f"\n**{i+1}.** {db_response[i][0]}" - - await after.channel.send(message) - - def check(m): - return m.author == user and m.channel == after.channel - done = False - while not done: + if after.channel.id == await db.get_discord_id("distributor_channel_id"): + print(f"{user.name} Joined The {after.channel.name} VC") + print(after.channel.members) + + - try: - response = await bot.wait_for('message', check=check, timeout=30.0) - except asyncio.TimeoutError: - await after.channel.send("Zu spät") - else: - try: - int(response.content) - except ValueError: - await after.channel.send(":x: Konnte nicht in ganze Zahl umwandeln") - continue - if int(response.content) <= len(db_response) and int(response.content) > 0: - channel_name = db_response[int(response.content)-1][0] - category = discord.utils.get(after.channel.guild.categories, id=await db.get_discord_id("new_channel_category_id")) - if category is None: - print("Kategorie nicht gefunden") + db_response = await db.get_channel_name_role_name_by_member(user.id) + message = "Welchen Club-Kanal willst du öffnen?" + for i in range(len(db_response)): + message += f"\n**{i+1}.** {db_response[i][0]}" + + await after.channel.send(message) + + def check(m): + return m.author == user and m.channel == after.channel + - role = discord.utils.get(after.channel.guild.roles, id=db_response[int(response.content)-1][1]) - if role is None: - print("Rolle nicht gefunden") + done = False + while not done: - overwrites = { - after.channel.guild.default_role: discord.PermissionOverwrite(view_channel=False), # @everyone can't view - role: discord.PermissionOverwrite(view_channel=True, connect=True) # Role can view and connect - } + try: + response = await bot.wait_for('message', check=check, timeout=30.0) + except asyncio.TimeoutError: + await after.channel.send("Zu spät") + else: + try: + int(response.content) + except ValueError: + await after.channel.send(":x: Konnte nicht in ganze Zahl umwandeln") + continue + if int(response.content) <= len(db_response) and int(response.content) > 0: + channel_name = db_response[int(response.content)-1][0] + + category = discord.utils.get(after.channel.guild.categories, id=await db.get_discord_id("new_channel_category_id")) + if category is None: + print("Kategorie nicht gefunden") + + role = discord.utils.get(after.channel.guild.roles, id=db_response[int(response.content)-1][1]) + if role is None: + print("Rolle nicht gefunden") + + overwrites = { + after.channel.guild.default_role: discord.PermissionOverwrite(view_channel=False), # @everyone can't view + role: discord.PermissionOverwrite(view_channel=True, connect=True) # Role can view and connect + } + + voice_channel = await category.create_voice_channel( + name = channel_name, + overwrites=overwrites + ) + distributor_vcs.append(voice_channel.id) + done = True + else: + await after.channel.send(":x: Nicht zulässige Zahl") - voice_channel = await category.create_voice_channel( - name = channel_name, - overwrites=overwrites - ) - done = True - else: - await after.channel.send(":x: Nicht zulässige Zahl") + if user.voice: + await user.move_to(voice_channel) + - if user.voice: - await user.move_to(voice_channel) + if before.channel and before.channel.id in distributor_vcs: + if len(before.channel.members) == 0: + await before.channel.delete(reason="Niemand ist mehr verbunden") + distributor_vcs.remove(before.channel.id) bot.run(bot_token.token)