discord py权限系统(不能踢自己,不能踢mods)

clj7thdc  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(359)

我正在写一个kick命令,结果很成功。今天我发现我的管理员中有一半是为了好玩而禁止他们自己,所以有了这个问题,我想说一两句话,如果一个版主试图踢/禁止他们自己,或者是一个有问题的人 manage_guild bot将返回类似“该用户是工作人员”的权限。我不能踢他们!”如果我在其他机器人上看到“你试图踢的成员是一个机器人”的字样,那就额外加分也许是通过一个“机器人”角色。
这是密码-

@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)
4xrmg8kj

4xrmg8kj1#

您可以尝试检查上述人员的权限。例如,如果我不想让机器人用 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.")
gdx19jrr

gdx19jrr2#

您只需检查目标 userkick_members 允许并作出相应的React。你也可以检查一下 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)

相关问题