Бот‑предсказатель для Telegram создание функции и техническая архитектура

Кратко о статье: в этом материале мы разберём, зачем нужен бот‑предсказатель в групповых чатах Telegram, какие функции он может выполнять, как его создать с нуля, какие инструменты и сервисы использовать, а также какие подводные камни следует учитывать. Всё изложено в виде пошагового руководства с примерами кода и рекомендациями по дальнейшему развитию.


Почему именно предсказательный бот?

Групповые чаты в Telegram часто «застревают» в рутине: обсуждения идут по привычным темам, а настроение участников может падать. Бот, который выдаёт случайные, иногда едкие, но всегда весёлые предсказания, решает несколько задач одновременно:

  • Развлечение. Неожиданные фразы вызывают смех и поднимают настроение.
  • Интерактивность. Пользователи начинают отвечать, обсуждать, «прокатывать» предсказания друг другу.
  • Социальный «тэгинг». Бот может упоминать конкретных участников, что делает игру более персонализированной.
  • Статистика. Сбор данных о том, какие предсказания наиболее популярны, позволяет улучшать контент.

История создания популярного бота‑предсказателя

Вдохновение для большинства подобных проектов пришло из поста на DTF от 16 апреля 2022 года. Автор делится своим опытом:

«Пару лет назад сделал бота для телеграма, который по команде выдаёт случайное едкое предсказание, вроде «Осознаешь, что ты пидор» или «Тебя будут чморить в чате». Тогда бот был сделан на кривом конструкторе и насчитывал едва ли 50 предсказаний. Сегодня их уже более 200, а бот научился тегать пользователей, вести статистику и не повторяться!»

Ключевые этапы развития проекта:

  1. Первый прототип на конструкторе без возможности тегать пользователей.
  2. Ручное создание отдельных ботов для каждого чата – неудобно и масштабируемо плохо.
  3. Наращивание базы предсказаний до 200+ штук, добавление тегов и статистики.
  4. Переписывание кода с нуля, создание админ‑панели в браузере.
  5. Публичный релиз и приглашение пользователей вызывать предсказания командой /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)
 

Как добавить бота в чат и начать использовать

  1. Создайте бота через @BotFather и получите токен.
  2. Разверните код на выбранном хостинге (Heroku, Railway и т.д.).
  3. Перейдите в настройки бота в BotFather и включите Inline Mode (по желанию).
  4. Добавьте бота в любой групповой чат, сделайте его администратором (чтобы он мог упоминать участников).
  5. В чате введите команду /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.
  • Поделиться ссылкой с друзьями и собрать обратную связь.
  • Развивать функционал: добавлять новые предсказания, интегрировать мемы, создавать собственные режимы.

Удачной разработки и весёлых предсказаний! 🚀