Skip to main content

Бот-модератор

Базовый бот для группы: банит спам, кикает по капче, удаляет запрещённые слова.

Минимальный пример (Python + aiogram)

import asyncio, os
from aiogram import Bot, Dispatcher, F
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from aiogram.types import Message, ChatMemberUpdated
from aiogram.filters import Command

session = AiohttpSession(api=TelegramAPIServer.from_base('https://api.telefon.chat'))
bot = Bot(token=os.environ['BOT_TOKEN'], session=session)
dp = Dispatcher()

BAD_WORDS = {'спам1', 'плохое-слово'}

# 1. Удаление сообщений со стоп-словами
@dp.message(F.text)
async def filter_bad_words(m: Message):
if any(w in m.text.lower() for w in BAD_WORDS):
try:
await m.delete()
except Exception:
pass
await m.chat.restrict(user_id=m.from_user.id, permissions={'can_send_messages': False})

# 2. Кик по новым участникам
@dp.chat_member()
async def on_join(event: ChatMemberUpdated):
if event.new_chat_member.status == 'member':
# Можно отправить капчу или сразу кик
await bot.send_message(event.chat.id, f'Привет, {event.from_user.first_name}!')

# 3. Команды для админов
@dp.message(Command('ban'))
async def ban_cmd(m: Message):
if m.reply_to_message:
target_id = m.reply_to_message.from_user.id
await bot.ban_chat_member(m.chat.id, target_id)
await m.reply('Забанен.')

if __name__ == '__main__':
asyncio.run(dp.start_polling(bot))

Что покрывает

  • deleteMessage — удаление спама
  • restrictChatMember — мут
  • banChatMember — бан
  • chat_member event — отслеживание новых участников

Боевые модераторы

См. shieldy: https://github.com/MasterGroosha/telegram-shieldy — антиспам-капча с реальным флоу одобрения через тап. Работает на нашем API.