init commit
This commit is contained in:
539
README.md
Normal file
539
README.md
Normal 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.
|
||||
Reference in New Issue
Block a user