在discord.py中检查用户是否具有权限

4

我正在为我的discord.py机器人制作一个踢出命令。以下是可能用于kick命令的一些代码:

    async kick_command(self, ctx, userName: discord.User):
      prefix_used = ctx.prefix
      alias_used = ctx.invoked_with
      text = msg[len(prefix_used) + len(alias_used):]
      if discord.User permissions = "admin":
        try:
          kick(User)
        except Exception as e:
          ee = "Error: " + e
          await ctx.send_message(content=ee)

我相信if语句和kick(User)是无效的语法。你能帮我吗?
我的代码: 点击这里
2个回答

5
试试这个:
@bot.command()
@has_permissions(kick_members=True)  
async def kick(self, ctx, Member: discord.Member):
          await bot.kick(Member)

@kick.error
async def kick_error(error, ctx):
   if isinstance(error, MissingPermissions):
       await ctx.send("You don't have permission to do that!")

不要忘记导入has_permissionsfrom discord.ext.commands import has_permissions

你能修复吗? NameError: name ‘kick_members’ is not defined - user12327406
@CodingAndMemes 我修改了代码,因为我相信这是最简单的方法。 - K. Koster
我稍微改了一下,加入了这段代码:async def kick_command(self, ctx, Member: discord.Member): await kick(Member)但是它报错了: NameError: name ‘kick’ is not defined - user12327406
可能是因为您输入了 kick(Member) 而不是 ctx.kick(Member) - K. Koster

1
实际上,有一种更好的方法可以做到这一点而不需要导入。我建议不要导入,只需按照我下面展示的方式进行操作,因为如果您计划导入所有这些内容,这将节省您一些时间。
这不需要导入任何关于has_permissions的内容。

@commands.has_permissions(kick_members=True)  
async def kick(self, ctx, Member: discord.Member):
    await bot.kick(Member)

1
你仍然需要from discord.ext import commands - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接