Răsfoiți Sursa

Added a demotion command similar to the promotion command, allowing supervisors to demote users within their department.

BaumSplitter41 4 luni în urmă
părinte
comite
4061bb39d2
1 a modificat fișierele cu 70 adăugiri și 0 ștergeri
  1. 70 0
      VPD_BOT/cogs/demotion.py

+ 70 - 0
VPD_BOT/cogs/demotion.py

@@ -0,0 +1,70 @@
+import discord
+from discord.ext import commands
+from discord.commands import Option
+from discord.commands import slash_command
+import configparser
+
+
+class helpcache(commands.Cog):
+    def __init__(self, bot: discord.Bot):
+        self.bot = bot
+
+
+#Command initialization
+    @slash_command(name="promotion", description= "Promote a department member   to the next rank")
+    async def promotion(
+        self,
+        ctx,
+        user: str = Option(discord.User, "Select User", required=True),
+    ):
+    if user not in ctx.guild.members:
+        await ctx.respond("The selected user is not a member on this Server!", ephemeral=True)
+        return
+    elif user == self.bot.user:
+        await ctx.respond(f"This is me - the {self.bot.user}", ephemeral=True)
+        return
+    elif user == ctx.author:
+        await ctx.respond("You cannot promote yourself!", ephemeral=True)
+        return
+    server = ctx.guild
+    config = configparser.RawConfigParser()
+    configFilePath = r'config.cfg'
+    config.read_file(open(configFilePath))
+    
+    #Role Configuration
+    department1_ranks_ids = config.get('Role Management', 'department1_ranks').split(', ')
+    department1_ranks = [ctx.guild.get_role(int(role_id)) for role_id in department1_ranks_ids]
+    department1_supervisor_role_id = int(config.get('Einweisung', 'department1_supervisor_id'))
+    department1_supervisor_role = server.get_role(department1_supervisor_role_id)
+
+    #department2_ranks_ids = config.get('Role Management', 'department2_ranks').split(', ')
+    #department2_ranks = [ctx.guild.get_role(int(role_id)) for role_id in department2_ranks_ids]
+    #department2_supervisor_role_id = int(config.get('Einweisung', 'department2_supervisor_id'))
+    #department2_supervisor_role = server.get_role(department2_supervisor_role_id)
+
+    #Command implementation
+    if ctx.author.roles.contains(department1_supervisor_role):
+        ranks = department1_ranks
+    #elif ctx.author.roles.contains(department2_supervisor_role):
+        #ranks = department2_ranks
+    else:
+        await ctx.respond("You do not have permission to use this command!", ephemeral=True)
+        return
+    
+    user_roles = user.roles
+    user_rank = None
+    for rank in ranks:
+        if rank in user_roles:
+            user_rank = rank
+            break
+    if user_rank is None:
+        await ctx.respond("The selected user does not have a rank that can be demoted!", ephemeral=True)
+        return
+    current_rank_index = ranks.index(user_rank)
+    if current_rank_index == 0:
+        await ctx.respond("The selected user is already at the lowest rank!", ephemeral=True)
+        return
+    new_rank = ranks[current_rank_index - 1]
+    await user.remove_roles(user_rank)
+    await user.add_roles(new_rank)
+    await ctx.respond(f"{user.mention} has been demoted to {new_rank.name}!", ephemeral=True)