Michelangelo
Telegram dating bot π
Hi, I made my own telegram dating bot, I hope it will be useful for someone. If you want to support me, you can put a star on the repository ; )
- π Languages: Localization into different languages: English, Russian, Ukrainian, Spanish, French, Polish
- π¬ Matchmaking: Helps users find each other based on shared interests.
- π Secure: Implements secure data handling and user privacy.
- π Geolocation: Uses
Geopyto determine user locations. - π Analytics: Generates visual graphs with
Matplotlib. - ποΈ Multilingual Support: Supports multiple languages via
i18n. - β‘ High Performance: Utilizes
Redisfor FSM storage andPostgreSQLfor database operations.
First you need to bend the repository to the correct derictory.
git clone https://github.com/devvsima/dating-bot.git
cd dating-botFirst, copy the .env.dist file and rename it to .env:
Now you need to customize the .env file
| Name | Description | Example |
|---|---|---|
| TELEGRAM_BOT_TOKEN | Bot Token from @BotFather | 1234567:ASDSFDkjdjdsedmD |
| SKIP_UPDATES | Skip requests that were sent while the bot was not working | False |
| SET_COMMANDS | Set commands when starting the bot | True |
| RATE_LIMIT | Number of requests | 2 |
| TIME_WINDOW | Time interval between requests | 1 |
| ADMINS | List of administrator IDs separated by commas | 123456789, 987654321 |
| BOT_CHANNEL_URL | (Optional) The bot channel he will be sending to | https://t.me/michalangelo_channel |
| MODERATOR_GROUP_ID | (Optional) ID of the moderator group where complaints and notifications will be sent | -100234567891 |
| NEW_USER_ALET_TO_GROUP | (Optional) Send notifications to the moderator group | True |
Configuring user profile search
| Search | Description | Example |
|---|---|---|
| INITIAL_DISTANCE | Initial search distance | 200.0 |
| MAX_DISTANCE | Maximum search distance | 1500.0 |
| RADIUS_STEP | Distance increase step | 200.0 |
| MIN_PROFILES | Minimum number of profiles for search | 100 |
| BLOCK_SIZE | Size of profile batches in search (needed for randomizing profiles) | 15.0 |
| AGE_RANGE_MULTIPLIER | Age search multiplier (the older the person, the greater the age range) | 0.20 |
| MIN_AGE_RANGE | Minimum age difference | 2 |
| MAX_AGE_RANGE | Maximum age difference | 15 |
| Name | Description | Example |
|---|---|---|
| WEBAPP_HOST | Website host | localhost |
| WEBAPP_PORT | Website port | 8080 |
| WEBAPP_DOMEN | Website domain | michalangelo.com |
| WEBAPP_URL | (Optional) Direct link, if specified, will be used as a priority | https://devvsima.github.io/michalangelo-landing/ |
If the settings for the database are not filled out, asynchronous Sqlite will be used. You can specify a link to the database connection in the DB_URL field.
| Name | Description | Example |
|---|---|---|
| DB_NAME | Database name | michalangelo |
| DB_HOST | Database host | localhost |
| DB_PORT | Database port | 5432 |
| DB_USER | User with Database permissions | postgres |
| DB_PASS | Password from user | bestpass |
| DB_URL | (Optional) Direct link, if specified, will be used as a priority | postgresql+asyncpg://...@... |
| ECHO | Logging of all SQL queries | False |
| POOL_SIZE | Number of sessions | 12 |
| MAX_OVERFLOW | Number of additional sessions | 18 |
This project uses Alembic for database migrations.
-
Create a new migration:
alembic revision --autogenerate -m "Migration description" -
Apply migrations:
alembic upgrade head # Apply all new migrations alembic upgrade "migration_name" # Apply a specific migration
-
Rollback migrations:
alembic downgrade base # Reset database to the initial state alembic downgrade "migration_name" # Rollback to a specific migration
Ensure alembic.ini has the correct database URL before running migrations.
The radishes will be used as FSM storage. If redis is not connected the standard aiogram storage will be used.
You can specify a link to the Redis connection in the RD_URL field at once.
| Name | Description | Example |
|---|---|---|
| REDIS_HOST | Redis host | localhost |
| REDIS_PORT | Redis host | 6379 |
| REDIS_PASS | (Optional) Redis password | bestpass |
| REDIS_DB | Database number | 1 |
| RD_URL | (Optional) Direct link, if specified, will be used as a priority | redis://...@... |
The bot has localization for 6 languages: en, ru, uk, fr, pl, es
- Collecting all the texts from the project
pybabel extract --input-dirs=. -o data/locales/bot.pot --project=bot- Create files with translations into different languages
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l en
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l ru
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l uk
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l fr
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l pl
pybabel init -i data/locales/bot.pot -d data/locales -D bot -l es- Once all the texts are translated, you need to compile all the translations
pybabel compile -d data/locales -D bot --statisticspybabel update -i data/locales/bot.pot -d data/locales -D botFirst you need to install dependencies and do a database migration if you haven't already done one.
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python main.pypython3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
python main.pyπ‘ You may have to install apt install python3.10-venv or something like that.
uv sync
uv run main.pyThis project is licensed under the Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. See the LICENSE file for details.

