Files
tg_tinder_bot/README.md
2025-09-12 21:25:54 +09:00

539 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.