So my Discord bot can now kick people from my server. But right now everyone can use the kick command. And I don’t want that. How can I fix this?
This is the code so far:
@bot.command(name="kick", aliases=["k"], help= "Kicks specified user from the server.")
async def kick(ctx, member: discord.Member, *, reason=None):
  await member.send(f"You have been kicked, reason: {reason}")
  await member.kick(reason=reason)
  await ctx.send(f'User {member} has been kicked.')
  embed=discord.Embed(
    title= f"{bot.user} kicked {member}",
    color=bot.embed_color,
    timestamp = datetime.datetime.now(datetime.timezone.utc)
  )
  embed.set_author(
    name = ctx.author.name,
    icon_url = ctx.author.avatar_url
  )
  embed.set_footer(
  text = bot.footer,
  icon_url = bot.footerimg
  )
  await bot.debug_channel.send(embed = embed)
  print("Sent and embed")
  await ctx.message.add_reaction('✅')
  print("Added a reaction to a message")
Thanks in advance!
Advertisement
Answer
I have done that before, this answer may help.
First, import the necessary modules first
import discord from discord.ext import commands from discord.ext.commands import has_permissions
I assume you already set up and defined the bot. Here’s the whole code that you should replace with:
@bot.command(name="kick", aliases=["k"], help= "Kicks specified user from the server.")
@has_permissions(administrator=True)
async def kick(ctx, member: discord.Member, *, reason=None):
  await member.send(f"You have been kicked, reason: {reason}")
  await member.kick(reason=reason)
  await ctx.send(f'User {member} has been kicked.')
  embed=discord.Embed(
    title= f"{bot.user} kicked {member}",
    color=bot.embed_color,
    timestamp = datetime.datetime.now(datetime.timezone.utc)
  )
  embed.set_author(
    name = ctx.author.name,
    icon_url = ctx.author.avatar_url
  )
  embed.set_footer(
  text = bot.footer,
  icon_url = bot.footerimg
  )
  await bot.debug_channel.send(embed = embed)
  print("Sent and embed")
  await ctx.message.add_reaction('✅')
  print("Added a reaction to a message")
What I added was simply @has_permissions(administrator=True). The answer you got previously in this post missed the s after permission, so it should be @has_permissions instead of @has_permission.
I hope this works! Let me know if you it works!
