← Все вопросы
Как сделать команды кика и бана для Discord-бота (модерация)?
6
Делаю бота-модератора для сервера. Нужны команды кикнуть и забанить участника, чтобы их могли использовать только админы. Как написать !kick @user и проверить права, чтобы кто попало не банил?
2 ответа
11
✓ Принятый ответ — помог автору
Используй member.kick() / member.ban() и декоратор @commands.has_permissions, чтобы ограничить, кто может звать команду:
from discord.ext import commands
@bot.command()
@commands.has_permissions(kick_members=True)
async def kick(ctx, member: discord.Member, *, причина='не указана'):
await member.kick(reason=причина)
await ctx.send(f'{member} кикнут. Причина: {причина}')
@bot.command()
@commands.has_permissions(ban_members=True)
async def ban(ctx, member: discord.Member, *, причина='не указана'):
await member.ban(reason=причина)
await ctx.send(f'{member} забанен.')
@commands.has_permissions(...) проверяет права у того, кто вызвал команду. У самого бота при этом тоже должны быть права Kick/Ban Members, и его роль должна быть выше роли жертвы — иначе Forbidden.
4
Добавь обработку, когда прав нет, чтобы не сыпались страшные трейсбеки:
@kick.error
async def kick_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('У тебя нет прав на это.')
Ваш ответ
, чтобы ответить на вопрос.