# 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 под фотографиями - ✅ **Система матчинга** - уведомления о взаимных лайках - ✅ **Управление фотографиями** - загрузка и просмотр нескольких фото профиля - ✅ **Детальные профили** - возраст, город, работа, интересы, описание - ✅ **Статистика матчей** - количество лайков и совпадений - ✅ **Настройки поиска** - возрастные рамки и гендерные предпочтения ### � Интерактивные элементы - **👍 Лайк** - выразить симпатию пользователю - **👎 Дислайк** - пропустить профиль - **⭐ Суперлайк** - показать особый интерес - **👤 Просмотр профиля** - детальная информация о кандидате - **📸 Больше фото** - дополнительные изображения профиля - **🔄 Следующий профиль** - перейти к новому кандидату ### 🛠️ Технические особенности - **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** для управления конфигурацией ## � Скриншоты ### 🚀 Главное меню ``` 🎉 Добро пожаловать в Telegram Tinder Bot! 🤖 Выберите действие: [🔍 Искать людей] [👤 Мой профиль] [💕 Мои матчи] [⚙️ Настройки] ``` ### 💫 Просмотр анкеты ``` 👨 Алексей, 25 📍 Москва 💼 Программист 🎯 В поиске: Серьезные отношения "Люблю путешествовать и изучать новые технологии!" [👎 Дислайк] [⭐ Суперлайк] [👍 Лайк] [👤 Профиль] [📸 Ещё фото] [🔄 Следующий] ``` ### 🎯 Уведомление о матче ``` 🎉 У вас новый матч! 💕 Вы понравились друг другу с Анной! Самое время начать общение! 😊 [💬 Написать] [👤 Профиль] [🔍 Продолжить поиск] ``` ## 🚀 Быстрый старт ### 1. Предварительные требования - Node.js 16+ - PostgreSQL 12+ - Telegram Bot Token (получить у [@BotFather](https://t.me/BotFather)) ### 2. Установка ```bash # Клонировать репозиторий git clone cd telegram-tinder-bot # Установить зависимости npm install # Скомпилировать TypeScript npm run build ``` ### 3. Настройка базы данных ```bash # Создать базу данных PostgreSQL createdb telegram_tinder_bot # Инициализация базы данных npm run init:db ``` ### 4. Запуск бота ```bash # Запуск на Windows .\bin\start_bot.bat # Запуск на Linux/macOS npm run start ``` ## � Развертывание на Ubuntu Для развертывания на Ubuntu 24.04 используйте скрипт установки: ```bash # Сделать скрипт исполняемым chmod +x ./bin/install_ubuntu.sh # Запустить установку sudo ./bin/install_ubuntu.sh ``` Подробные инструкции по развертыванию на Ubuntu находятся в [docs/DEPLOY_UBUNTU.md](docs/DEPLOY_UBUNTU.md). ## 🔄 Обновление бота ### На Windows: ```bash # Обновление с ветки main npm run update:win # Обновление с определенной ветки .\bin\update.bat develop ``` ### На Linux/macOS: ```bash # Обновление с ветки main npm run update # Обновление с определенной ветки и перезапуском сервиса ./bin/update.sh develop --restart-service ``` ## 🔧 Настройка переменных окружения Создайте `.env` файл: ```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 ``` ## 🔍 Отладка и логи ```bash # Просмотр логов в реальном времени 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](https://t.me/BotFather)) - Docker и Docker Compose (опционально) ### 2. Установка и запуск #### С использованием стартовых скриптов (рекомендуется) ```bash # Клонировать репозиторий git clone cd telegram-tinder-bot # На Windows: .\start.bat # На Linux/macOS: chmod +x start.sh ./start.sh ``` Скрипт автоматически: - Проверит наличие файла .env и создаст его из шаблона при необходимости - Предложит выбор между запуском с локальной БД или подключением к внешней - Настроит все необходимые параметры окружения - Запустит контейнеры Docker #### Без Docker ```bash # Клонировать репозиторий git clone 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. **Общение**: Переходите к чату с матчами (функция в разработке) ## ⚙️ Конфигурация ### Основные настройки ```json { "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) ### Схема БД Полная схема создается автоматически через миграции: ```sql -- Таблица пользователей 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. **Географическая близость** - сортировка по городу (если указан) ```typescript // Пример алгоритма поиска async findCandidates(userId: string): Promise { 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]); } ``` ## 🔔 Система уведомлений Автоматические уведомления о важных событиях: - 💖 **Новый лайк** - "Кто-то лайкнул ваш профиль!" - ⭐ **Суперлайк** - "Вы очень понравились пользователю!" - 🎉 **Новый матч** - "У вас новый матч! Начните общение!" - � **Возвращение** - Напоминания неактивным пользователям ## 🚧 Разработка и тестирование ### Режим разработки ```bash # Запуск с горячей перезагрузкой 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 для часто используемых данных - **Оптимизация запросов** - минимизация обращений к БД ### Масштабирование ```bash # Горизонтальное масштабирование 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](../../issues) 2. Создайте детальный отчет с: - Описанием проблемы - Шагами воспроизведения - Ожидаемым поведением - Скриншотами (если применимо) ### 💡 Предложения функций 1. Опишите предлагаемую функцию 2. Объясните, почему она нужна 3. Приложите mockup или схему (если возможно) ### 🔧 Pull Request ```bash # 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](LICENSE). ## 🆘 Поддержка и сообщество ### 📞 Получить помощь - **GitHub Issues** - для багов и вопросов разработки - **Discussions** - для общих вопросов и идей - **Email** - support@example.com для приватных вопросов ### 🎯 Дорожная карта #### 🔜 Ближайшие обновления - [ ] 💬 **Чат между матчами** - полноценная система сообщений - [ ] 🔍 **Расширенные фильтры** - по интересам, образованию, росту - [ ] 📱 **Push-уведомления** - мгновенные оповещения о новых матчах #### 🚀 Долгосрочные планы - [ ] 🎥 **Видео-профили** - короткие видео-презентации - [ ] 🤖 **AI-рекомендации** - умный подбор на основе поведения - [ ] 📊 **Аналитика** - статистика успешности и активности - [ ] 🌍 **Геолокация** - поиск по расстоянию - [ ] 💎 **Premium функции** - бустеры, суперлайки, расширенные фильтры ---

🤖 Telegram Tinder Bot

Made with ❤️ for connecting people

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

``` ## Установка 1. Клонируйте репозиторий: ``` git clone ``` 2. Перейдите в директорию проекта: ``` cd telegram-tinder-bot ``` 3. Установите зависимости: ``` npm install ``` ## Использование 1. Настройте файл конфигурации `config/default.json`, указав необходимые токены и параметры подключения к базе данных. 2. Запустите бота: ``` npm start ``` ## Функциональность - **Профили пользователей**: Пользователи могут создавать и обновлять свои профили. - **Свайпы**: Пользователи могут свайпать влево или вправо для взаимодействия с другими пользователями. - **Матчи**: Бот находит совпадения между пользователями на основе их свайпов. - **Уведомления**: Пользователи получают уведомления о новых матчах и сообщениях. ## Вклад Если вы хотите внести свой вклад в проект, пожалуйста, создайте форк репозитория и отправьте пулл-реквест с вашими изменениями. ## Лицензия Этот проект лицензирован под MIT License.