Files
tg_tinder_bot/README.md
2025-09-12 21:25:54 +09:00

20 KiB
Raw Permalink Blame History

Telegram Tinder Bot 💕

Полнофункциональный Telegram бот для знакомств в стиле Tinder с инлайн-кнопками и красивым интерфейсом. Пользователи могут создавать профили, просматривать анкеты других пользователей, ставить лайки, получать матчи и общаться друг с другом.

Функционал

🎯 Основные возможности

  • Полная регистрация профиля - пошаговое создание анкеты с фотографиями
  • Умный поиск партнеров - фильтрация по возрасту, полу и предпочтениям
  • Инлайн-кнопки вместо свайпов - удобные кнопки Like/Dislike/SuperLike под фотографиями
  • Система матчинга - уведомления о взаимных лайках
  • Управление фотографиями - загрузка и просмотр нескольких фото профиля
  • Детальные профили - возраст, город, работа, интересы, описание
  • Статистика матчей - количество лайков и совпадений
  • Настройки поиска - возрастные рамки и гендерные предпочтения

<EFBFBD> Интерактивные элементы

  • 👍 Лайк - выразить симпатию пользователю
  • 👎 Дислайк - пропустить профиль
  • Суперлайк - показать особый интерес
  • 👤 Просмотр профиля - детальная информация о кандидате
  • 📸 Больше фото - дополнительные изображения профиля
  • 🔄 Следующий профиль - перейти к новому кандидату

🛠️ Технические особенности

  • PostgreSQL - надежная база данных с UUID и индексами
  • TypeScript - типизированный код с проверкой ошибок
  • Telegram Bot API - современные инлайн-клавиатуры
  • Миграции БД - структурированная схема данных
  • Error Handling - обработка ошибок и валидация данных
  • Docker Support - контейнеризация для развертывания

🛠 Технологии

  • Node.js 18+ + TypeScript
  • PostgreSQL 16 для хранения данных
  • node-telegram-bot-api для работы с Telegram API
  • UUID для генерации уникальных ID
  • dotenv для управления конфигурацией

<EFBFBD> Скриншоты

🚀 Главное меню

🎉 Добро пожаловать в Telegram Tinder Bot! 🤖

Выберите действие:
[🔍 Искать людей] [👤 Мой профиль] [💕 Мои матчи] [⚙️ Настройки]

💫 Просмотр анкеты

👨 Алексей, 25
📍 Москва
💼 Программист
🎯 В поиске: Серьезные отношения

"Люблю путешествовать и изучать новые технологии!"

[👎 Дислайк] [⭐ Суперлайк] [👍 Лайк]
[👤 Профиль] [📸 Ещё фото] [🔄 Следующий]

🎯 Уведомление о матче

🎉 У вас новый матч! 💕

Вы понравились друг другу с Анной!
Самое время начать общение! 😊

[💬 Написать] [👤 Профиль] [🔍 Продолжить поиск]

🗂️ Структура проекта

telegram-tinder-bot/
├── src/
│   ├── bot.ts                    # Основной файл бота
│   ├── handlers/                 # Обработчики событий
│   │   ├── commandHandlers.ts    # Команды (/start, /profile, etc.)
│   │   ├── callbackHandlers.ts   # Инлайн-кнопки (лайки, просмотр)
│   │   └── messageHandlers.ts    # Текстовые сообщения
│   ├── services/                 # Бизнес-логика
│   │   ├── profileService.ts     # Управление профилями
│   │   ├── matchingService.ts    # Алгоритм совпадений
│   │   └── notificationService.ts # Уведомления
│   ├── models/                   # Модели данных
│   │   ├── User.ts              # Пользователь Telegram
│   │   ├── Profile.ts           # Профиль знакомств
│   │   ├── Swipe.ts            # Лайки/дислайки
│   │   └── Match.ts            # Совпадения
│   └── database/                # База данных
│       ├── connection.ts        # Подключение к PostgreSQL
│       └── migrations/init.sql  # Создание таблиц
├── config/                      # Конфигурация
│   └── default.json            # Настройки по умолчанию
├── docker-compose.yml          # Docker Compose
├── Dockerfile                  # Docker контейнер
└── package.json               # Зависимости npm

🚀 Развертывание

📦 Docker (Рекомендуется)

# Клонировать репозиторий
git clone <repository-url>
cd telegram-tinder-bot

# Настроить переменные окружения
cp .env.example .env
# Отредактируйте .env файл

# Запустить с Docker Compose
docker-compose up -d

# Применить миграции БД
docker-compose exec app npm run db:migrate

🖥️ Обычная установка

# Установить зависимости
npm install

# Создать базу данных
createdb telegram_tinder_bot
psql -d telegram_tinder_bot -f src/database/migrations/init.sql

# Запустить бота
npm run build
npm start

☁️ Продакшен

# Установить PM2
npm install -g pm2

# Запустить через PM2
pm2 start ecosystem.config.js

# Мониторинг
pm2 monit
pm2 logs telegram-tinder-bot

🔧 Настройка переменных окружения

Создайте .env файл:

# Telegram Bot
TELEGRAM_BOT_TOKEN=123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

# PostgreSQL Database  
DB_HOST=localhost
DB_PORT=5432
DB_NAME=telegram_tinder_bot
DB_USER=postgres
DB_PASSWORD=your_secure_password

# Application
NODE_ENV=production
PORT=3000
LOG_LEVEL=info

# Optional: File uploads
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=5242880
ALLOWED_FILE_TYPES=image/jpeg,image/png,image/gif

🔍 Отладка и логи

# Просмотр логов в реальном времени
tail -f logs/app.log

# Проверка статуса бота
curl http://localhost:3000/health

# Тестирование базы данных
npm run test:db

# Запуск в режиме разработки
npm run dev

🚀 Быстрый старт

1. Предварительные требования

  • Node.js 16+
  • PostgreSQL 12+
  • Telegram Bot Token (получить у @BotFather)

2. Установка

# Клонировать репозиторий
git clone <repository-url>
cd telegram-tinder-bot

# Установить зависимости
npm install

# Скомпилировать TypeScript
npm run build

3. Настройка базы данных

# Создать базу данных PostgreSQL
createdb telegram_tinder_bot

# Запустить миграции
psql -d telegram_tinder_bot -f src/database/migrations/init.sql

4. Запуск бота

# Компиляция TypeScript
npm run build

# Запуск бота
npm start

📖 Использование

🤖 Команды бота

  • /start - Главное меню - регистрация или возврат в главное меню
  • /profile - Мой профиль - просмотр и редактирование профиля
  • /browse - Поиск анкет - просмотр других пользователей
  • /matches - Мои матчи - список взаимных лайков
  • /settings - Настройки - управление профилем и предпочтениями
  • /help - Справка - информация о командах

💫 Процесс использования

  1. Регистрация: /start → выбор пола → заполнение данных → загрузка фото
  2. Поиск: /browse → просмотр анкет с инлайн-кнопками
  3. Лайки: Используйте кнопки под фотографиями кандидатов
  4. Матчи: При взаимном лайке получаете уведомление о матче
  5. Общение: Переходите к чату с матчами (функция в разработке)

⚙️ Конфигурация

Основные настройки

{
  "app": {
    "maxPhotos": 6,           // Максимум фото в профиле
    "maxDistance": 100,       // Максимальное расстояние поиска (км)
    "minAge": 18,            // Минимальный возраст
    "maxAge": 99,            // Максимальный возраст
    "superLikesPerDay": 1,   // Суперлайков в день
    "likesPerDay": 100       // Обычных лайков в день
  },
  "limits": {
    "maxBioLength": 500,      // Максимальная длина описания
    "maxInterests": 10,       // Максимум интересов
    "photoMaxSize": 5242880   // Максимальный размер фото (5MB)
  }
}

🗄️ База данных

Основные таблицы

  • users - Пользователи Telegram (id, username, first_name, last_name)
  • profiles - Анкеты знакомств (name, age, gender, bio, photos, location, job)
  • search_preferences - Настройки поиска (age_min, age_max, looking_for)
  • swipes - История лайков/дислайков (user_id, target_id, action)
  • matches - Взаимные лайки (user_id, matched_user_id, created_at)

Схема БД

Полная схема создается автоматически через миграции:

-- Таблица пользователей Telegram
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    telegram_id BIGINT UNIQUE NOT NULL,
    username VARCHAR(255),
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Таблица профилей знакомств
CREATE TABLE profiles (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id) ON DELETE CASCADE,
    name VARCHAR(255) NOT NULL,
    age INTEGER NOT NULL CHECK (age >= 18 AND age <= 99),
    gender VARCHAR(10) NOT NULL,
    bio TEXT,
    photos TEXT[], -- JSON массив фотографий
    location VARCHAR(255),
    job VARCHAR(255),
    interests TEXT[], -- JSON массив интересов
    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

📊 Алгоритм матчинга

Умный алгоритм подбора кандидатов:

  1. Фильтрация по предпочтениям - возраст и пол согласно настройкам
  2. Исключение просмотренных - пропуск уже лайкнутых/дислайкнутых
  3. Приоритет активности - активные пользователи показываются чаще
  4. Рандомизация - случайный порядок для разнообразия
  5. Географическая близость - сортировка по городу (если указан)
// Пример алгоритма поиска
async findCandidates(userId: string): Promise<Profile[]> {
  return await this.db.query(`
    SELECT DISTINCT p.* FROM profiles p
    JOIN search_preferences sp ON sp.user_id = $1
    WHERE p.user_id != $1
      AND p.is_active = true
      AND p.age >= sp.age_min 
      AND p.age <= sp.age_max
      AND p.gender = sp.looking_for
      AND NOT EXISTS (
        SELECT 1 FROM swipes s 
        WHERE s.user_id = $1 AND s.target_id = p.user_id
      )
    ORDER BY RANDOM()
    LIMIT 20
  `, [userId]);
}

🔔 Система уведомлений

Автоматические уведомления о важных событиях:

  • 💖 Новый лайк - "Кто-то лайкнул ваш профиль!"
  • Суперлайк - "Вы очень понравились пользователю!"
  • 🎉 Новый матч - "У вас новый матч! Начните общение!"
  • <EFBFBD> Возвращение - Напоминания неактивным пользователям

🚧 Разработка и тестирование

Режим разработки

# Запуск с горячей перезагрузкой
npm run dev

# Отладочные логи
DEBUG=* npm run dev

# Тестирование отдельных модулей  
npm run test:unit
npm run test:integration

Структура кода

  • Handlers - Обработчики событий Telegram (команды, кнопки, сообщения)
  • Services - Бизнес-логика (профили, матчинг, уведомления)
  • Models - Типы данных и интерфейсы TypeScript
  • Database - Подключение к PostgreSQL и миграции
  • Handlers - Обработчики событий Telegram
  • Types - TypeScript интерфейсы и типы

🔒 Безопасность

  • Валидация всех пользовательских данных
  • Защита от спама (лимиты на действия)
  • Система жалоб и блокировок
  • Шифрование чувствительных данных
  • Rate limiting для API запросов

📈 Масштабирование

Для высоких нагрузок рекомендуется:

  • Использовать Redis для кэширования

🚀 Производительность и масштабирование

Оптимизация

  • Индексы БД - на часто запрашиваемых полях (telegram_id, age, gender)
  • Пагинация - ограничение выборки кандидатов для экономии памяти
  • Кэширование - Redis для часто используемых данных
  • Оптимизация запросов - минимизация обращений к БД

Масштабирование

# Горизонтальное масштабирование
pm2 start ecosystem.config.js -i max

# Мониторинг нагрузки
pm2 monit
pm2 logs --lines 100

Рекомендации для продакшена:

  • PostgreSQL репликация (master-slave)
  • CDN для изображений профилей
  • Webhook вместо polling для Telegram API
  • Load balancer для множественных инстансов

🤝 Участие в разработке

Мы открыты для вклада в проект! Вот как можно помочь:

🐛 Сообщение об ошибках

  1. Проверьте существующие Issues
  2. Создайте детальный отчет с:
    • Описанием проблемы
    • Шагами воспроизведения
    • Ожидаемым поведением
    • Скриншотами (если применимо)

💡 Предложения функций

  1. Опишите предлагаемую функцию
  2. Объясните, почему она нужна
  3. Приложите mockup или схему (если возможно)

🔧 Pull Request

# 1. Fork репозитория
git clone https://github.com/your-username/telegram-tinder-bot.git

# 2. Создайте feature branch
git checkout -b feature/amazing-feature

# 3. Внесите изменения и commit
git commit -m 'feat: add amazing feature'

# 4. Push и создайте PR
git push origin feature/amazing-feature

📝 Лицензия

Этот проект распространяется под лицензией MIT License.

Подробности см. в файле LICENSE.

🆘 Поддержка и сообщество

📞 Получить помощь

  • GitHub Issues - для багов и вопросов разработки
  • Discussions - для общих вопросов и идей
  • Email - support@example.com для приватных вопросов

🎯 Дорожная карта

🔜 Ближайшие обновления

  • 💬 Чат между матчами - полноценная система сообщений
  • 🔍 Расширенные фильтры - по интересам, образованию, росту
  • 📱 Push-уведомления - мгновенные оповещения о новых матчах

🚀 Долгосрочные планы

  • 🎥 Видео-профили - короткие видео-презентации
  • 🤖 AI-рекомендации - умный подбор на основе поведения
  • 📊 Аналитика - статистика успешности и активности
  • 🌍 Геолокация - поиск по расстоянию
  • 💎 Premium функции - бустеры, суперлайки, расширенные фильтры

🤖 Telegram Tinder Bot

Made with ❤️ for connecting people

ФункционалУстановкаИспользованиеУчастие

```

Установка

  1. Клонируйте репозиторий:
    git clone <URL>
    
  2. Перейдите в директорию проекта:
    cd telegram-tinder-bot
    
  3. Установите зависимости:
    npm install
    

Использование

  1. Настройте файл конфигурации config/default.json, указав необходимые токены и параметры подключения к базе данных.
  2. Запустите бота:
    npm start
    

Функциональность

  • Профили пользователей: Пользователи могут создавать и обновлять свои профили.
  • Свайпы: Пользователи могут свайпать влево или вправо для взаимодействия с другими пользователями.
  • Матчи: Бот находит совпадения между пользователями на основе их свайпов.
  • Уведомления: Пользователи получают уведомления о новых матчах и сообщениях.

Вклад

Если вы хотите внести свой вклад в проект, пожалуйста, создайте форк репозитория и отправьте пулл-реквест с вашими изменениями.

Лицензия

Этот проект лицензирован под MIT License.