【问题标题】:Discord py permission system (cant kick self, cant kick mods)Discord py 权限系统(不能踢自己,不能踢模组)
【发布时间】:2021-09-20 01:49:13
【问题描述】:

我正在编写一个 kick 命令,结果已经成功。今天我发现我的一半管理员为了好玩而禁止自己,所以对于这个问题,我想要一两行,如果版主试图踢/禁止自己或拥有manage_guild 权限的人,机器人会返回类似“那个用户是工作人员,我踢不过他们!” 如果我得到其他机器人的东西,上面写着“你要踢的成员是机器人!”,则加分。也许通过“机器人”角色。

这是代码 -

@client.command()
@commands.has_permissions(kick_members=True)
async def kick(ctx, user: discord.Member, *, reason="No reason provided"):
        await user.kick(reason=reason)
        kick = discord.Embed(title=f"User {user.name}#{user.discriminator} has been **kicked** from the server. <a:m_verifyblack:850825891780100096>", color=0xFF8300, description=f"Reason: {reason}\nBy: {ctx.author.mention}")
        await ctx.message.delete()
        await ctx.channel.send(embed=kick)
@kick.error
async def kick_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("**:no_entry_sign: You cant do that!**")
@kick.error
async def kick_error(ctx, error):
    if isinstance(error, commands.MissingRequiredArgument):
        kick = discord.Embed(title=f"Please pass a user.", description="`.kick {user}`\nExample:\n`.kick @user`,   `.kick {user.id}`")
        await ctx.channel.send(embed=kick)

【问题讨论】:

    标签: python discord bots


    【解决方案1】:

    您可以简单地检查目标user 是否具有kick_members 权限并做出相应的反应。 您还可以检查user 是否实际上是bot

    这是你的代码的修改版本,可以解决问题:

    @client.command()
    @commands.has_permissions(kick_members=True)
    async def kick(ctx, user: discord.Member, *, reason="No reason provided"):
            if not user.permissions_in(ctx.channel).kick_members or user.bot:
                    return await ctx.send("You cannot kick staff members or bots")
    
            await user.kick(reason=reason)
            kick = discord.Embed(title=f"User {user.name}#{user.discriminator} has been **kicked** from the server. <a:m_verifyblack:850825891780100096>", color=0xFF8300, description=f"Reason: {reason}\nBy: {ctx.author.mention}")
            await ctx.message.delete()
            await ctx.channel.send(embed=kick)
    @kick.error
    async def kick_error(ctx, error):
        if isinstance(error, commands.MissingPermissions):
            await ctx.send("**:no_entry_sign: You cant do that!**")
    @kick.error
    async def kick_error(ctx, error):
        if isinstance(error, commands.MissingRequiredArgument):
            kick = discord.Embed(title=f"Please pass a user.", description="`.kick {user}`\nExample:\n`.kick @user`,   `.kick {user.id}`")
            await ctx.channel.send(embed=kick)
    

    【讨论】:

      【解决方案2】:

      您可以尝试检查上述人员的权限。例如,如果我不希望机器人踢出具有ban_members 权限的人:

      if user.guild_permissions.ban_members:
          await ctx.channel.send("Cannot kick this person.")
      

      另外,为了防止踢到自己,你可以试试:

      if ctx.message.author == user:
          await ctx.channel.send("You can't kick yourself.")
      

      【讨论】:

        猜你喜欢
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 2022-01-17
        • 2021-08-22
        • 2018-12-24
        • 1970-01-01
        • 2017-12-03
        相关资源
        最近更新 更多