Модерация участников
Модерация участников
banChatMember
Блокирует участника: он исключается из чата и не может вернуться. Требует право block_users.
POST ?method=banChatMember
{ "chat_id": 123, "user_id": 42, "reason": "спам" }
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
chat_id | int | ✓ | ID чата |
user_id | int | ✓ | Кого блокировать |
reason | string | — | Причина, попадает в журнал |
Ответ: { "ok": true, "result": true }. Журнал: ban.
unbanChatMember
Снимает блокировку. Требует block_users.
POST ?method=unbanChatMember
{ "chat_id": 123, "user_id": 42 }
Журнал: unban.
kickChatMember
Исключает участника без блокировки — он может вернуться по ссылке-приглашению. Требует remove_users.
POST ?method=kickChatMember
{ "chat_id": 123, "user_id": 42 }
Журнал: kick.
promoteChatMember
Назначает администратора. Требует add_admins или роль владельца.
{
"chat_id": 123,
"user_id": 42,
"permissions": {
"delete_messages": true,
"remove_users": true,
"block_users": true,
"pin_messages": true,
"invite_users": true,
"change_info": false,
"add_admins": false,
"post_messages": false,
"edit_messages": false
},
"custom_title": "Модератор"
}
Не переданные права считаются false. Если бот не владелец, права, которых нет у него самого, молча вырезаются из набора. custom_title обрезается до 32 символов. Пользователь должен уже состоять в чате. Журнал: promote.
Ошибки: 400 — цель не в чате или это владелец; 403 — нет add_admins либо цель равна или старше бота по правам.
demoteChatMember
Снимает права администратора. Требует add_admins.
POST ?method=demoteChatMember
{ "chat_id": 123, "user_id": 42 }
Владельца снять нельзя — 400 Cannot demote owner. Журнал: demote.
setChatAdministratorCustomTitle
Меняет звание администратора, не трогая его права. Требует add_admins.
POST ?method=setChatAdministratorCustomTitle
{ "chat_id": 123, "user_id": 42, "custom_title": "Основатель" }
Пользователь должен быть администратором или владельцем, иначе 400 User is not admin. Журнал: custom_title_set.
pykodaribot
from pykodaribot import ChatAdministratorRights
await bot.ban_chat_member(chat_id, user_id, reason="спам")
await bot.unban_chat_member(chat_id, user_id)
await bot.kick_chat_member(chat_id, user_id)
await bot.promote_chat_member(chat_id, user_id, ChatAdministratorRights(
delete_messages=True,
remove_users=True,
pin_messages=True,
), custom_title="Модератор")
await bot.demote_chat_member(chat_id, user_id)
await bot.set_chat_administrator_custom_title(chat_id, user_id, "Основатель")
Команда модерации в ответ на сообщение нарушителя:
@dp.message(filters.command("ban"))
async def ban(msg):
if not msg.reply_to_message_id:
await msg.answer("Ответьте этой командой на сообщение нарушителя")
return
target = await bot.get_chat_member(msg.chat.id, msg.from_user.id)
if target.status == "member":
return
await msg.answer("Готово")