25 KiB
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- Справка - информация о командах
💫 Процесс использования
- Регистрация:
/start→ выбор пола → заполнение данных → загрузка фото - Поиск:
/browse→ просмотр анкет с инлайн-кнопками - Лайки: Используйте кнопки под фотографиями кандидатов
- Матчи: При взаимном лайке получаете уведомление о матче
- Общение: Переходите к чату с матчами (функция в разработке)
⚙️ Конфигурация
Основные настройки
{
"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
);
📊 Алгоритм матчинга
Умный алгоритм подбора кандидатов:
- Фильтрация по предпочтениям - возраст и пол согласно настройкам
- Исключение просмотренных - пропуск уже лайкнутых/дислайкнутых
- Приоритет активности - активные пользователи показываются чаще
- Рандомизация - случайный порядок для разнообразия
- Географическая близость - сортировка по городу (если указан)
// Пример алгоритма поиска
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 для множественных инстансов
🤝 Участие в разработке
Мы открыты для вклада в проект! Вот как можно помочь:
🐛 Сообщение об ошибках
- Проверьте существующие Issues
- Создайте детальный отчет с:
- Описанием проблемы
- Шагами воспроизведения
- Ожидаемым поведением
- Скриншотами (если применимо)
💡 Предложения функций
- Опишите предлагаемую функцию
- Объясните, почему она нужна
- Приложите 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
Установка
- Клонируйте репозиторий:
git clone <URL> - Перейдите в директорию проекта:
cd telegram-tinder-bot - Установите зависимости:
npm install
Использование
- Настройте файл конфигурации
config/default.json, указав необходимые токены и параметры подключения к базе данных. - Запустите бота:
npm start
Функциональность
- Профили пользователей: Пользователи могут создавать и обновлять свои профили.
- Свайпы: Пользователи могут свайпать влево или вправо для взаимодействия с другими пользователями.
- Матчи: Бот находит совпадения между пользователями на основе их свайпов.
- Уведомления: Пользователи получают уведомления о новых матчах и сообщениях.
Вклад
Если вы хотите внести свой вклад в проект, пожалуйста, создайте форк репозитория и отправьте пулл-реквест с вашими изменениями.
Лицензия
Этот проект лицензирован под MIT License.