Discord bot check if user is admin

后端 未结 3 1203
滥情空心
滥情空心 2021-01-13 16:28

Hi i\'m new to python coding with discord and I have tried to make a command that tells the user if they are a admin or not but well... its not working in the slightest

相关标签:
3条回答
  • 2021-01-13 16:43

    You can use the has_permissions check to see if a user has the administrator privilege.

    We can then handle the error that failing that check will throw in order to send a failure message.

    from discord.ext.commands import Bot, has_permissions, CheckFailure
    
    client = Bot()
    
    @client.command(pass_context=True)
    @has_permissions(administrator=True)
    async def whoami(ctx):
        msg = "You're an admin {}".format(ctx.message.author.mention)  
        await client.send_message(ctx.message.channel, msg)
    
    @whoami.error
    async def whoami_error(error, ctx):
        if isinstance(error, CheckFailure):
            msg = "You're an average joe {}".format(ctx.message.author.mention)  
            await client.send_message(ctx.message.channel, msg)
    
    0 讨论(0)
  • 2021-01-13 16:45

    If message.author.server_permissions.administrator doesn't work.

    Change it to message.author.guild_permissions.administrator

    Or try message.author.top_role.permissions.administrator, this will return you a bool.

    One thing is, normally the server owner sets the administrator to the server top role, so this will work most of the time. But if they don't, the third sol won't work.

    0 讨论(0)
  • 2021-01-13 17:03

    Change

    @client.command(name="whoami",description="who are you?")
    async def whoami():
    

    to

    @client.command(pass_context=True)
    async def whoami(ctx):
    

    Then you can use ctx to get all kinds of stuff like the user that wrote it, the message contents and so on

    To see if a User is an administrator do
    if ctx.message.author.server_permissions.administrator: which should return True if the user is an an Administator

    Your code should look like this:

    import discord
    import asyncio
    from discord.ext.commands import Bot
    
    client = Bot(description="My Cool Bot", command_prefix="!", pm_help = False, )
    @client.event
    async def on_ready():
      print("Bot is ready!")
      return await client.change_presence(game=discord.Game(name='My bot'))
    
    @client.command(pass_context = True)
    async def whoami(ctx):
        if ctx.message.author.server_permissions.administrator:
            msg = "You're an admin {0.author.mention}".format(ctx.message)  
            await client.send_message(ctx.message.channel, msg)
        else:
            msg = "You're an average joe {0.author.mention}".format(ctx.message)  
            await client.send_message(ctx.message.channel, msg)
    client.run('Your_Bot_Token')
    
    0 讨论(0)
提交回复
热议问题