Files
tg_tinder_bot/README.md
2025-09-18 14:19:49 +09:00

25 KiB
Raw Permalink Blame History

Telegram Tinder Bot 💕

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

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

telegram-tinder-bot/
├── bin/                       # Исполняемые скрипты и утилиты
│   ├── start_bot.bat          # Скрипт запуска для Windows
│   ├── install_ubuntu.sh      # Скрипт установки для Ubuntu
│   ├── update.sh              # Скрипт обновления для Linux/macOS
│   ├── update.bat             # Скрипт обновления для Windows
│   └── setup.sh               # Скрипт настройки окружения
│
├── docs/                       # Документация проекта
│   ├── ARCHITECTURE.md        # Архитектура приложения
│   ├── DEPLOYMENT.md          # Инструкции по развертыванию
│   ├── DEPLOY_UBUNTU.md       # Инструкции по развертыванию на Ubuntu
│   ├── LOCALIZATION.md        # Информация о локализации
│   ├── NATIVE_CHAT_SYSTEM.md  # Документация по системе чата
│   ├── PROJECT_SUMMARY.md     # Общее описание проекта
│   └── VIP_FUNCTIONS.md       # Описание премиум функций
│
├── migrations/                # Миграции базы данных
│   ├── 1758144488937_initial-schema.js        # Начальная схема БД
│   └── 1758144618548_add-missing-profile-columns.js  # Дополнительные колонки
│
├── scripts/                   # Вспомогательные скрипты
│   ├── add-hobbies-column.js  # Скрипт добавления колонки hobbies
│   ├── add-premium-columns.js # Скрипт добавления премиум колонок
│   ├── add-premium-columns.ts # TypeScript версия скрипта
│   ├── create_profile_fix.js  # Исправление профилей
│   └── migrate-sync.js        # Синхронизация миграций
│
├── sql/                       # SQL скрипты
│   ├── add_looking_for.sql    # Добавление колонки looking_for
│   ├── add_missing_columns.sql # Добавление недостающих колонок
│   ├── add_premium_columns.sql # Добавление премиум колонок
│   ├── add_updated_at.sql     # Добавление колонки updated_at
│   ├── clear_database.sql     # Очистка базы данных
│   └── recreate_tables.sql    # Пересоздание таблиц
│
├── src/                       # Исходный код приложения
│   ├── bot.ts                 # Основной файл бота
│   ├── controllers/           # Контроллеры
│   ├── database/              # Функции для работы с БД
│   ├── handlers/              # Обработчики сообщений и команд
│   ├── locales/               # Локализация
│   ├── models/                # Модели данных
│   ├── scripts/               # Скрипты для запуска
│   │   └── initDb.ts          # Инициализация базы данных
│   ├── services/              # Сервисы и бизнес-логика
│   ├── types/                 # TypeScript типы
│   └── utils/                 # Утилиты и вспомогательные функции
│
├── tests/                     # Тесты
│   └── test-bot.ts            # Тестовая версия бота
│
├── .dockerignore              # Игнорируемые Docker файлы
├── .env                       # Переменные окружения (локальные)
├── .env.example               # Пример файла переменных окружения
├── database.json              # Конфигурация базы данных
├── docker-compose.yml         # Настройка Docker Compose
├── Dockerfile                 # Docker-образ приложения
├── package.json               # Зависимости и скрипты NPM
└── tsconfig.json              # Настройки TypeScript

Функционал

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

  • Полная регистрация профиля - пошаговое создание анкеты с фотографиями
  • Умный поиск партнеров - фильтрация по возрасту, полу и предпочтениям
  • Инлайн-кнопки вместо свайпов - удобные кнопки 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
📍 Москва
💼 Программист
🎯 В поиске: Серьезные отношения

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

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

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

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

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

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

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

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

# Инициализация базы данных
npm run init:db

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

# Запуск на Windows
.\bin\start_bot.bat

# Запуск на Linux/macOS
npm run start

<EFBFBD> Развертывание на Ubuntu

Для развертывания на Ubuntu 24.04 используйте скрипт установки:

# Сделать скрипт исполняемым
chmod +x ./bin/install_ubuntu.sh

# Запустить установку
sudo ./bin/install_ubuntu.sh

Подробные инструкции по развертыванию на Ubuntu находятся в docs/DEPLOY_UBUNTU.md.

🔄 Обновление бота

На Windows:

# Обновление с ветки main
npm run update:win

# Обновление с определенной ветки
.\bin\update.bat develop

На Linux/macOS:

# Обновление с ветки main
npm run update

# Обновление с определенной ветки и перезапуском сервиса
./bin/update.sh develop --restart-service

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

Создайте .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)
  • Docker и Docker Compose (опционально)

2. Установка и запуск

С использованием стартовых скриптов (рекомендуется)

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

# На Windows:
.\start.bat

# На Linux/macOS:
chmod +x start.sh
./start.sh

Скрипт автоматически:

  • Проверит наличие файла .env и создаст его из шаблона при необходимости
  • Предложит выбор между запуском с локальной БД или подключением к внешней
  • Настроит все необходимые параметры окружения
  • Запустит контейнеры Docker

Без Docker

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

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

# Скопировать файл конфигурации
cp .env.example .env
# Отредактируйте файл .env и укажите свой TELEGRAM_BOT_TOKEN

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

# Запустить миграции
npm run migrate:up

# Скомпилировать 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.