AI-антиспам бот для Telegram — челленджи с генерацией тем на Cloudflare Workers, бесплатный serverless.
- 🏘️ Мульти-сообщества: один бот обслуживает до 10 групп
- 📅 Три типа челленджей: ежедневные, еженедельные, ежемесячные
- 🗳️ Голосование за темы: AI генерирует варианты, участники выбирают
- 🎨 Простое участие: просто отправьте картинку в тему челленджа
- 🔗 Ссылки с превью: опционально принимает ссылки как работы
- ⭐ Подсчёт реакций: автоматический подсчёт (🌚 не учитывается)
- 🏆 Лидерборд: рейтинг победителей (отдельный для каждой группы)
- 🚫 Анти-плагиат: пересланные изображения не принимаются
- 🧠 Умный AI: не повторяет темы (помнит последние 10)
- 💡 Предложение тем: участники могут предлагать свои темы
- 🎭 Режимы контента: vanilla / medium / nsfw
- ☁️ Serverless: работает на Cloudflare Workers (бесплатно!)
- 🎛️ Веб-админка (опционально, в
admin/) — управление AI/расписанием/текстами без перезаливки кода
В папке admin/ лежит готовая Cloudflare Pages админка к боту: смена AI-движка на лету, редактирование расписаний и текстов, лог запросов и затрат, KV explorer.
| AI Engine — токены и presets в одном месте | AI Test — 6 тем за секунду, видно цену |
![]() |
![]() |
| AI Stats — затраты по дням / моделям | Prompts — инструкции и корпус референсов |
![]() |
![]() |
Подробная инструкция, архитектура, KV-схема и установка → admin/README.md.
- Telegram-группа с включёнными темами (Topics)
- Аккаунт Cloudflare (бесплатный)
- API-ключ Google AI Studio (бесплатный)
- Откройте @BotFather
/newbot→ введите имя → введите username- Скопируйте токен (например:
1234567890:ABCdefGHI...) /mybots→ выберите бота → Bot Settings → Group Privacy → Turn off
- Откройте Google AI Studio
- Create API Key → скопируйте
- Cloudflare Dashboard → Workers & Pages → Create Worker
- Дайте имя (например:
challenge-bot) → Deploy - Edit Code → вставьте код из
worker.js→ Deploy
- Workers & Pages → KV → Create namespace
- Имя:
CHALLENGE_KV→ Add - Привяжите к Worker: Settings → Bindings → Add → KV Namespace
- Variable name:
CHALLENGE_KV
- Variable name:
Settings → Variables and Secrets → Add (тип: Encrypt):
| Имя | Значение | Обязательно |
|---|---|---|
BOT_TOKEN |
Токен от BotFather | ✅ Да |
GEMINI_API_KEY |
API-ключ Google AI Studio (Gemini) — провайдер AI по умолчанию | ✅ Да |
ADMIN_SECRET |
Любой пароль для HTTP API | ✅ Да |
WEBHOOK_SECRET |
Секрет для проверки webhook (любая строка) | ⬜ Нет |
💡 Если ставишь админку — там в секции
TOKENSможно сохранить OpenRouter ключ и через UI переключить движок на Claude / GPT / Llama / любую модель из 350+ без перезаливки воркера. См.admin/.
💡
WEBHOOK_SECRETповышает безопасность, проверяя что запросы приходят именно от Telegram.
Вариант A: Cron Triggers (Cloudflare)
Settings → Triggers → Cron Triggers:
0 * * * * — каждый час (проверяет расписание всех групп)
Вариант B: Отложенные сообщения Telegram (проще!)
Telegram поддерживает отложенные сообщения с повтором. Вместо Cron можно использовать сам Telegram как планировщик:
- Напишите команду в группе (например
/poll_daily) - Не отправляйте сразу — нажмите и удерживайте кнопку отправки
- Выберите "Запланировать сообщение"
- Установите время и "Повторять: Ежедневно"
Telegram будет автоматически отправлять команду по расписанию.
Откройте в браузере:
https://ваш-worker.workers.dev/setup
Или используйте curl:
curl https://ваш-worker.workers.dev/setupЕсли установлен ADMIN_SECRET:
curl -H "Authorization: Bearer ВАШ_ADMIN_SECRET" \
https://ваш-worker.workers.dev/setupОтвет при успехе:
{"success": true, "webhook": "https://ваш-worker.workers.dev/webhook"}- Добавьте бота в группу как администратора
- Дайте права: удалять сообщения, закреплять, управлять темами
- Напишите в группе:
/register_community - Настройте топики — напишите в каждой теме:
/set_daily— в теме дневных челленджей/set_weekly— в теме недельных/set_monthly— в теме месячных/set_winners— в теме победителей
Повторите шаг 8 для каждой группы (до 10).
| Команда | Описание |
|---|---|
/start, /help |
Справка по участию |
/stats |
Ваша статистика побед |
/leaderboard |
Топ-10 победителей |
/current |
Текущие активные челленджи |
/suggest Название | Описание |
Предложить тему для челленджа |
/suggestions |
Список предложенных тем |
| Команда | Описание |
|---|---|
/register_community |
Зарегистрировать группу |
/list_communities |
Список всех групп бота |
/unregister_community |
Удалить группу из бота |
| Команда | Описание |
|---|---|
/topic_id |
Показать ID текущей темы |
/set_daily |
Назначить тему для дневных челленджей |
/set_weekly |
Назначить тему для недельных |
/set_monthly |
Назначить тему для месячных |
/set_winners |
Назначить тему для победителей |
| Команда | Описание |
|---|---|
/set_content_mode |
Режим контента: vanilla/medium/nsfw |
/set_accept_links on/off |
Принимать ссылки с превью как работы |
/set_suggestion_reactions N |
Минимум реакций для предложения (по умолчанию 3) |
/schedule_daily ЧАС |
Время дневных челленджей (UTC) |
/schedule_weekly ДЕНЬ ЧАС |
Время недельных (0=вс, 6=сб) |
/schedule_monthly ДЕНЬ ЧАС |
Время месячных |
| Команда | Описание |
|---|---|
/admin |
Админ-панель со всеми командами |
/poll_daily |
Создать опрос дневного челленджа |
/poll_weekly |
Создать опрос недельного |
/poll_monthly |
Создать опрос месячного |
/run_daily |
Запустить дневной челлендж |
/run_weekly |
Запустить недельный |
/run_monthly |
Запустить месячный |
/finish_daily |
Завершить дневной |
/finish_weekly |
Завершить недельный |
/finish_monthly |
Завершить месячный |
/status |
Статус всех челленджей |
/cs_daily |
Статистика дневного челленджа |
/cs_weekly |
Статистика недельного |
/cs_monthly |
Статистика месячного |
/test_ai |
Проверить работу AI (Gemini / OpenRouter) |
- Генерация — AI создаёт темы, бот публикует опрос
- Голосование — участники выбирают тему
- Старт — опрос закрывается, объявляется тема-победитель
- Участие — любое изображение в топике = участие
- Реакции — участники оценивают работы (🌚 не считается)
- Итоги — объявление победителя, пересылка в "Победители"
Участники могут предлагать свои темы для челленджей:
- Предложение —
/suggest Название | Описание - Голосование — другие участники ставят реакции на понравившиеся предложения
- Одобрение — темы с достаточным числом реакций попадают в следующий опрос
- Интеграция — предложенные темы объединяются с AI-темами в опросе
Минимум реакций настраивается для каждой группы отдельно командой /set_suggestion_reactions.
- Каждая группа полностью изолирована
- Свои челленджи, лидерборды, настройки
- Один бот, один Worker, одна база KV
- Лимит: 10 групп
Все запросы требуют заголовок: Authorization: Bearer {ADMIN_SECRET}
| Метод | Endpoint | Описание |
|---|---|---|
GET |
/ или /health |
Проверка работоспособности |
GET |
/setup |
Настройка webhook |
GET |
/info |
Информация о всех сообществах |
GET |
/admin/status |
Список всех сообществ |
GET |
/admin/status?chat_id=ID |
Статус конкретного сообщества |
POST |
/admin/poll/{type}?chat_id=ID |
Создать опрос (type: daily/weekly/monthly) |
POST |
/admin/start/{type}?chat_id=ID |
Запустить челлендж |
POST |
/admin/finish/{type}?chat_id=ID |
Завершить челлендж |
Проверка работоспособности:
curl https://ваш-worker.workers.dev/healthПолучить статус всех сообществ:
curl -H "Authorization: Bearer ВАШ_СЕКРЕТ" \
https://ваш-worker.workers.dev/admin/statusПолучить статус конкретного сообщества:
curl -H "Authorization: Bearer ВАШ_СЕКРЕТ" \
"https://ваш-worker.workers.dev/admin/status?chat_id=<CHAT_ID>"Создать опрос дневного челленджа:
curl -X POST \
-H "Authorization: Bearer ВАШ_СЕКРЕТ" \
"https://ваш-worker.workers.dev/admin/poll/daily?chat_id=<CHAT_ID>"Запустить челлендж (закрыть опрос):
curl -X POST \
-H "Authorization: Bearer ВАШ_СЕКРЕТ" \
"https://ваш-worker.workers.dev/admin/start/daily?chat_id=<CHAT_ID>"Завершить челлендж (подвести итоги):
curl -X POST \
-H "Authorization: Bearer ВАШ_СЕКРЕТ" \
"https://ваш-worker.workers.dev/admin/finish/daily?chat_id=<CHAT_ID>"Получить информацию о сообществах:
curl -H "Authorization: Bearer ВАШ_СЕКРЕТ" \
https://ваш-worker.workers.dev/info{
"chatId": <CHAT_ID>,
"challenges": {
"daily": {
"theme": "Киберпанк-город",
"startedAt": "2025-01-15T10:00:00Z",
"participants": 12
},
"weekly": null,
"monthly": null
},
"polls": {
"daily": false,
"weekly": true,
"monthly": false
},
"activeTopics": [123, 456]
}- Проверьте, что бот — администратор группы
- Проверьте webhook: откройте
/setup - Проверьте логи в Cloudflare Dashboard → Workers → Logs
Добавьте бота в группу → /register_community → настройте топики
В группе: /unregister_community
Напишите /topic_id в нужной теме.
Напишите /register_community — бот покажет ID группы.
Через команды в группе:
/schedule_daily 17— дневные в 17:00 UTC/schedule_weekly 0 17— недельные: воскресенье 17:00/schedule_monthly 1 17— месячные: 1-го числа в 17:00
$0 при обычном использовании:
- Cloudflare Workers: 100K запросов/день бесплатно
- KV: 100K операций/день бесплатно
- Google AI: бесплатный tier достаточен
| Файл | Описание |
|---|---|
worker.js |
Чистый ванильный код — разверните и настройте под своё сообщество |
worker-mr-challenger.js |
Пример кастомизации с персонажем и стилем |
MIT — используйте свободно!
- Cloudflare Workers — бесплатный serverless
- Google AI Studio — Gemini, генерация тем
- OpenRouter — доступ к 350+ моделям одним токеном (опционально, через админку)
- Nerual Dreming — Telegram | neuro-cartel.com | ArtGeneration.me
Другие проекты @timoncool
| Проект | Описание |
|---|---|
| telegram-api-mcp | Telegram Bot API как MCP-сервер |
| Bulka | Платформа лайв-кодинга музыки |
| ACE-Step Studio | AI-студия музыки — песни, вокал, каверы, клипы |
| VideoSOS | AI-видеопродакшн в браузере |
| GitLife | Жизнь в неделях — интерактивный календарь |
Я создаю опенсорс софт и занимаюсь исследованиями в области ИИ. Большая часть всего, что я делаю, находится в открытом доступе. Ваши пожертвования позволяют мне создавать и исследовать больше, не отвлекаясь на поиск еды для продолжения существования =)
Все способы поддержки | dalink.to/nerual_dreming | boosty.to/neuro_art
- BTC:
1E7dHL22RpyhJGVpcvKdbyZgksSYkYeEBC - ETH (ERC20):
0xb5db65adf478983186d4897ba92fe2c25c594a0c - USDT (TRC20):
TQST9Lp2TjK6FiVkn4fwfGUee7NmkxEE7C





