मेरे discord.py बॉट में मेरे पास प्रतिबंध आदेश है। अनुमतियाँ काम करती हैं, इसलिए यदि आप व्यवस्थापक नहीं हैं तो आप किसी को प्रतिबंधित नहीं कर सकते। लेकिन जब कोई व्यवस्थापक किसी अन्य व्यवस्थापक या उसके ऊपर की भूमिका पर प्रतिबंध लगाने की कोशिश करता है, तो यह काम करता है। मैं ऐसा कैसे कर सकता हूं ताकि व्यवस्थापक केवल उनके नीचे की भूमिकाओं पर प्रतिबंध लगा सकें?

@commands.command(description = 'Bans a specified member with an optional reason')
@commands.has_permissions(ban_members = True)
async def ban(self,ctx, member:discord.Member, *, reason = "unspecified reason"):
    if member.id == ctx.author.id:
        await ctx.send("You cannot ban yourself, sorry! :)")
        return
    else: 
        await member.ban(reason = reason)
        reasonEmbed = discord.Embed(
            description = f'🔒👮‍♂️Succesfully banned {member.mention} for {reason}\n \n ',
            colour = 0xFF0000
        )
        reasonEmbed.set_author(name=f"{member.name}" + "#"+ f"{member.discriminator}", icon_url='{}'.format(member.avatar_url))
        reasonEmbed.set_footer(text=f"Banned by {ctx.author.name}", icon_url = '{}'.format(ctx.author.avatar_url))
        await ctx.send(embed=reasonEmbed)
0
Ramer 11 फरवरी 2021, 09:09

1 उत्तर

सबसे बढ़िया उत्तर

आप >= और top_role विशेषता का उपयोग कर सकते हैं, जो उस सदस्य की तुलना में भूमिकाओं की तुलना करेगा जिसे आप प्रतिबंधित करने का प्रयास कर रहे हैं, यदि आपकी अनुमति उस सदस्य से कम है जिसे आप प्रतिबंधित करने का प्रयास कर रहे हैं, तो यह होगा शेष कोड को चलने से रोकें। ऐसा करने का एक आसान तरीका यहां दिया गया है,

if member.top_role >= ctx.author.top_role:
    await ctx.send(f"You can only moderate members below your role")         
    return

आपके कोड पर लागू उदाहरण यहां दिया गया है,

@commands.command(description = 'Bans a specified member with an optional reason')
@commands.has_permissions(ban_members = True)
async def ban(self,ctx, member:discord.Member, *, reason = "unspecified reason"):
    if member.id == ctx.author.id:
        await ctx.send("You cannot ban yourself, sorry! :)")
        return
    
    if member.top_role >= ctx.author.top_role:
        await ctx.send(f"You can only moderate members below your role")         
        return

    else: 
        await member.ban(reason = reason)
        reasonEmbed = discord.Embed(
            description = f'🔒👮‍♂️Succesfully banned {member.mention} for {reason}\n \n ',
            colour = 0xFF0000
        )
        reasonEmbed.set_author(name=f"{member.name}" + "#"+ f"{member.discriminator}", icon_url='{}'.format(member.avatar_url))
        reasonEmbed.set_footer(text=f"Banned by {ctx.author.name}", icon_url = '{}'.format(ctx.author.avatar_url))
        await ctx.send(embed=reasonEmbed)
1
Cohen 11 फरवरी 2021, 09:59