Кратко о статье: в этом материале мы разберём, зачем нужен бот‑предсказатель в групповых чатах Telegram, какие функции он может выполнять, как его создать с нуля, какие инструменты и сервисы использовать, а также какие подводные камни следует учитывать. Всё изложено в виде пошагового руководства с примерами кода и рекомендациями по дальнейшему развитию.
Почему именно предсказательный бот?
Групповые чаты в Telegram часто «застревают» в рутине: обсуждения идут по привычным темам, а настроение участников может падать. Бот, который выдаёт случайные, иногда едкие, но всегда весёлые предсказания, решает несколько задач одновременно:
- Развлечение. Неожиданные фразы вызывают смех и поднимают настроение.
- Интерактивность. Пользователи начинают отвечать, обсуждать, «прокатывать» предсказания друг другу.
- Социальный «тэгинг». Бот может упоминать конкретных участников, что делает игру более персонализированной.
- Статистика. Сбор данных о том, какие предсказания наиболее популярны, позволяет улучшать контент.
История создания популярного бота‑предсказателя
Вдохновение для большинства подобных проектов пришло из поста на DTF от 16 апреля 2022 года. Автор делится своим опытом:
«Пару лет назад сделал бота для телеграма, который по команде выдаёт случайное едкое предсказание, вроде «Осознаешь, что ты пидор» или «Тебя будут чморить в чате». Тогда бот был сделан на кривом конструкторе и насчитывал едва ли 50 предсказаний. Сегодня их уже более 200, а бот научился тегать пользователей, вести статистику и не повторяться!»
Ключевые этапы развития проекта:
- Первый прототип на конструкторе без возможности тегать пользователей.
- Ручное создание отдельных ботов для каждого чата – неудобно и масштабируемо плохо.
- Наращивание базы предсказаний до 200+ штук, добавление тегов и статистики.
- Переписывание кода с нуля, создание админ‑панели в браузере.
- Публичный релиз и приглашение пользователей вызывать предсказания командой
/future.
Функциональные требования к боту
3.1 Базовый набор
- Ответ на команду
/futureслучайным предсказанием. - Тегание случайного участника чата (опционально).
- Запрет повторения предсказаний в течение определённого количества вызовов.
3.2 Расширенный набор
- Админ‑панель для добавления/удаления предсказаний без пересборки кода.
- Сохранение статистики: сколько раз каждое предсказание использовалось.
- Поддержка нескольких языков (русский, английский).
- Команды для администраторов:
/stats,/add,/remove.
Техническая архитектура
Для надёжной работы в продакшене рекомендуется следующая стек‑технология:
| Компонент | Рекомендация |
|---|---|
| Язык программирования | Python 3.11 (библиотека aiogram) или Node.js (пакет telegraf) |
| Хранилище предсказаний | SQLite для небольших ботов, PostgreSQL – для масштабируемости |
| Хранилище статистики | Тот же SQL‑сервер, отдельные таблицы predictions и usage_log |
| Хостинг | Heroku, Railway, Render или любой VPS (Ubuntu 22.04) |
4.1 Пример структуры проекта (Python + aiogram)
my_bot/ │ ├─ bot.py # основной файл с обработчиками ├─ config.py # токен и настройки ├─ db/ │ ├─ models;py # SQLAlchemy‑модели │ └─ init_db.py # инициализация БД ├─ admin/ │ └─ panel.py # простая веб‑панель └─ predictions/ └─ default.json # стартовый набор предсказаний
4.2 Ключевой код обработчика команды
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
import random
import asyncpg
bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)
@dp.message_handler(commands=['future'])
async def future_handler(message: types.Message):
# Получаем список предсказаний, которые ещё не использовались в текущей сессии
preds = await get_unused_predictions(message.chat.id)
if not preds:
# Сбрасываем «использованные» и берём заново
await reset_used_predictions(message.chat.id)
preds = await get_unused_predictions(message.chat.id)
pred = random.choice(preds)
# Тегаем случайного участника, если в предсказании есть {user}
if '{user}' in pred:
members = await bot.get_chat_administrators(message.chat.id)
user = random.choice(members).user
pred = pred.replace('{user}', f'@{user.username or user.full_name}')
await message.reply(pred)
await mark_prediction_used(message.chat.id, pred)
async def get_unused_predictions(chat_id):
# SELECT * FROM predictions WHERE chat_id=$1 AND used=false
...
async def mark_prediction_used(chat_id, text):
# UPDATE predictions SET used=true WHERE chat_id=$1 AND text=$2
...
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Как добавить бота в чат и начать использовать
- Создайте бота через @BotFather и получите токен.
- Разверните код на выбранном хостинге (Heroku, Railway и т.д.).
- Перейдите в настройки бота в BotFather и включите Inline Mode (по желанию).
- Добавьте бота в любой групповой чат, сделайте его администратором (чтобы он мог упоминать участников).
- В чате введите команду
/future. Бот выдаст случайное предсказание.
Лучшие практики и типичные ошибки
6.1 Не вызывайте бота в личных диалогах
Как отмечает автор оригинального проекта, в личных чатах бот быстро превращается в «черёд едких оскорблений», что может нарушить правила Telegram. Его главная роль – развлекать многолюдные чаты.
6.2 Обрабатывайте повторения
Если предсказания часто повторяются, пользователи быстро устают. Реализуйте механизм «использовано», который хранит ID предсказаний, уже показанных в текущей сессии.
6.3 Уважайте правила Telegram
- Не используйте оскорбления, направленные на конкретные группы людей (расовая, гендерная дискриминация и т.п.).
- Соблюдайте privacy mode – бот не должен читать сообщения, если это не требуется.
6.4 Храните предсказания в отдельном файле
Это упрощает добавление новых фраз без перезапуска бота. Формат JSON:
{
"predictions": [
"Осознаёшь, что ты {user}",
"Тебя будут {action} в чате",
"Сегодня {user} получит подарок"
]}
Как расширять функциональность
- Гороскопы. Добавьте отдельный набор предсказаний по знакам зодиака и команду
/horoscope. - Игровые режимы. Например, «Кто сегодня победит?», где бот выбирает победителя из участников.
- Интеграция с базой мемов. Вместо текста – отправка изображений/гифок.
- Модерация. Позволяйте админам отключать предсказания в определённые часы.
Пример админ‑панели (Flask)
from flask import Flask, request, render_template, redirect, url_for
import sqlite3
app = Flask(__name__)
def get_db:
conn = sqlite3.connect('predictions.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/')
def index:
db = get_db
preds = db.execute('SELECT * FROM predictions').fetchall
@app.route('/add', methods=['POST'])
def add:
text = request.form['text']
db = get_db
db.execute('INSERT INTO predictions (text, used) VALUES (?,0)', (text,))
db.commit
return redirect(url_for('index'))
@app.route('/delete/')
def delete(id):
db = get_db
db.execute('DELETE FROM predictions WHERE id=?', (id,))
db.commit
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
Бот‑предсказатель – простой, но мощный инструмент для поддержания живой атмосферы в групповых чатах Telegram. Благодаря открытой архитектуре, его можно быстро адаптировать под любые темы: от едких шуток до гороскопов и игровых сценариев. Главное – соблюдать баланс между юмором и правилами платформы, а также обеспечить удобный процесс управления контентом через админ‑панель.
Если вам понравился такой бот, советуем:
- Добавить его в свои активные чаты и протестировать команду
/future. - Поделиться ссылкой с друзьями и собрать обратную связь.
- Развивать функционал: добавлять новые предсказания, интегрировать мемы, создавать собственные режимы.
Удачной разработки и весёлых предсказаний! 🚀