首页 > 解决方案 > Discord.py 破坏静音命令

问题描述

我的静音命令完全坏了它没有添加静音角色,发送嵌入等。我不知道它有什么问题,因为它以前使用相同的确切代码工作。任何帮助或为什么它不起作用的原因?我已经检查了两次我对编码有点陌生,但这让我非常困惑。

  @commands.command(name="mute")
   async def mute(self, ctx, user: discord.Member = None, time: str = None):
       if user is None:
           em = discord.Embed(color = 0x3498db)
           em.add_field(name = "Insufficient arguments" , value = "Try again! Format `;mute @user/id <time>`")
           await ctx.send(embed = em)
       elif ctx.author.top_role.position <= user.top_role.position and ctx.guild.owner.id != ctx.author.id:
           em = discord.Embed(color = 0x3498db)
           em.add_field(name = "An Error Occurred." , value = "I cannot mute this user because they have the same or an higher role than me.")
           await ctx.send(embed = em)
           
       else:
           guild = ctx.guild
           mute_role = None

           for role in guild.roles:
               if role.name.lower() == "muted":
                   mute_role = role
                   break

           if mute_role in user.roles:
               em = discord.Embed(color = 0x3498db)
               em.add_field(name = "An Error Occurred!" , value = "User is already muted.")
               await ctx.send(embed = em)
             
               
           else:
               if not mute_role:
                   em = discord.Embed(color = 0x3498db)
                   em.add_field(name = "Mute role not found." , value = "> Creating mute role.")
                   await ctx.send(embed = em)
                  
                   mute_role = await create_mute_role(guild)

               if time is None:
                   await user.add_roles(mute_role)
                   em = discord.Embed(color = 0x3498db)
                   em.add_field(name = f"Mute Successful!" , value = f"Target: {user.mention} \nModerator: {ctx.author}")
                   await ctx.send(embed = em)
               
               else:
                   time_unit = None
                   parsed_time = None

                   if "s" in time:
                       time_unit = "seconds"
                       parsed_time = time[0:(len(time) - 1)]
                   elif "m" in time:
                       time_unit = "minutes"
                       parsed_time = time[0:(len(time) - 1)]
                   elif "h" in time:
                       time_unit = "hours"
                       parsed_time = time[0:(len(time) - 1)]
                   else:
                       time_unit = "minutes"  # default to minutes if user doesn't provide a time unit
                       parsed_time = time[0:len(time)]

                   await user.add_roles(mute_role)
                   em = discord.Embed(color = 0x3498db)
                   em.add_field(name = f"Mute Successful!" , value = f"Target: {user.mention} \nTime: {pased_time} {time_unit} \nModerator: {ctx.author}")
                   await ctx.send(embed = em)

                   if time_unit == "seconds":
                       await asyncio.sleep(int(parsed_time))
                   elif time_unit == "minutes":
                       await asyncio.sleep(int(parsed_time) * 60)
                   elif time_unit == "hours":
                       await asyncio.sleep(int(parsed_time) * 3600)

                   await user.remove_roles(mute_role)
                   await ctx.send(f"User {user.mention} has been unmuted after {parsed_time} {time_unit}! They can speak now.")

标签: pythondiscord

解决方案


推荐阅读