init commit

This commit is contained in:
2025-09-12 21:25:54 +09:00
commit 17efb2fb53
37 changed files with 12637 additions and 0 deletions

539
README.md Normal file
View File

@@ -0,0 +1,539 @@
# Telegram Tinder Bot 💕
Полнофункциональный Telegram бот для знакомств в стиле Tinder с инлайн-кнопками и красивым интерфейсом. Пользователи могут создавать профили, просматривать анкеты других пользователей, ставить лайки, получать матчи и общаться друг с другом.
## ✨ Функционал
### 🎯 Основные возможности
-**Полная регистрация профиля** - пошаговое создание анкеты с фотографиями
-**Умный поиск партнеров** - фильтрация по возрасту, полу и предпочтениям
-**Инлайн-кнопки вместо свайпов** - удобные кнопки Like/Dislike/SuperLike под фотографиями
-**Система матчинга** - уведомления о взаимных лайках
-**Управление фотографиями** - загрузка и просмотр нескольких фото профиля
-**Детальные профили** - возраст, город, работа, интересы, описание
-**Статистика матчей** - количество лайков и совпадений
-**Настройки поиска** - возрастные рамки и гендерные предпочтения
### <20> Интерактивные элементы
- **👍 Лайк** - выразить симпатию пользователю
- **👎 Дислайк** - пропустить профиль
- **⭐ Суперлайк** - показать особый интерес
- **👤 Просмотр профиля** - детальная информация о кандидате
- **📸 Больше фото** - дополнительные изображения профиля
- **🔄 Следующий профиль** - перейти к новому кандидату
### 🛠️ Технические особенности
- **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** для управления конфигурацией
## <20> Скриншоты
### 🚀 Главное меню
```
🎉 Добро пожаловать в 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 (Рекомендуется)
```bash
# Клонировать репозиторий
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
```
### 🖥️ Обычная установка
```bash
# Установить зависимости
npm install
# Создать базу данных
createdb telegram_tinder_bot
psql -d telegram_tinder_bot -f src/database/migrations/init.sql
# Запустить бота
npm run build
npm start
```
### ☁️ Продакшен
```bash
# Установить PM2
npm install -g pm2
# Запустить через PM2
pm2 start ecosystem.config.js
# Мониторинг
pm2 monit
pm2 logs telegram-tinder-bot
```
## 🔧 Настройка переменных окружения
Создайте `.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))
### 2. Установка
```bash
# Клонировать репозиторий
git clone <repository-url>
cd telegram-tinder-bot
# Установить зависимости
npm install
# Скомпилировать TypeScript
npm run build
```
### 3. Настройка базы данных
```bash
# Создать базу данных PostgreSQL
createdb telegram_tinder_bot
# Запустить миграции
psql -d telegram_tinder_bot -f src/database/migrations/init.sql
```
### 4. Запуск бота
```bash
# Компиляция 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<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]);
}
```
## 🔔 Система уведомлений
Автоматические уведомления о важных событиях:
- 💖 **Новый лайк** - "Кто-то лайкнул ваш профиль!"
-**Суперлайк** - "Вы очень понравились пользователю!"
- 🎉 **Новый матч** - "У вас новый матч! Начните общение!"
- <20> **Возвращение** - Напоминания неактивным пользователям
## 🚧 Разработка и тестирование
### Режим разработки
```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 функции** - бустеры, суперлайки, расширенные фильтры
---
<div align="center">
<h3>🤖 Telegram Tinder Bot</h3>
<p>Made with ❤️ for connecting people</p>
<p>
<a href="#-функционал">Функционал</a>
<a href="#-быстрый-старт">Установка</a>
<a href="#-использование">Использование</a>
<a href="#-участие-в-разработке">Участие</a>
</p>
</div>
```
## Установка
1. Клонируйте репозиторий:
```
git clone <URL>
```
2. Перейдите в директорию проекта:
```
cd telegram-tinder-bot
```
3. Установите зависимости:
```
npm install
```
## Использование
1. Настройте файл конфигурации `config/default.json`, указав необходимые токены и параметры подключения к базе данных.
2. Запустите бота:
```
npm start
```
## Функциональность
- **Профили пользователей**: Пользователи могут создавать и обновлять свои профили.
- **Свайпы**: Пользователи могут свайпать влево или вправо для взаимодействия с другими пользователями.
- **Матчи**: Бот находит совпадения между пользователями на основе их свайпов.
- **Уведомления**: Пользователи получают уведомления о новых матчах и сообщениях.
## Вклад
Если вы хотите внести свой вклад в проект, пожалуйста, создайте форк репозитория и отправьте пулл-реквест с вашими изменениями.
## Лицензия
Этот проект лицензирован под MIT License.