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- Справка - информация о командах
💫 Процесс использования
- Регистрация:
/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.