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
Geopy
to determine user locations. - π Analytics: Generates visual graphs with
Matplotlib
. - ποΈ Multilingual Support: Supports multiple languages via
i18n
. - β‘ High Performance: Utilizes
Redis
for FSM storage andPostgreSQL
for database operations.
First you need to bend the repository to the correct derictory.
git clone https://github.com/devvsima/dating-bot.git
cd dating-bot
First, copy the .env.dist
file and rename it to .env
:
Now you need to customize the .env
file
Name | Description | Example |
---|---|---|
TOKEN | Bot Token from @BotFather | 1234567:ASDSFDkjdjdsedmD |
ADMINS | List of administrator id's | 2345678,12345677 |
MODERATOR_GROUP_ID | (Optional) ID of the administrator group, where user complaints will be sent. | -100123456789 |
SKIP_UPDATES | Option whether the bot will skip updates while not active | True, False |
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 | 1234567:ASDSFDkjdjdsedmD |
DB_HOST | Database host | 2345678,12345677 |
DB_PORT | Database port | -100123456789 |
DB_USER | Database owner | True, False |
DB_PASS | Database password | postgresql |
DB_URL | (Optional)Full link to connect to the database | postgresql+asyncpg://user:password@localhost:port/name |
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 | Database host | localhost |
REDIS_PORT | Database port | 6379 |
REDIS_DB | Database name | 5 |
RD_URL | (Optional)Full link to connect to the database | redis://localhost:6379/5 |
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 --statistics
pybabel update -i data/locales/bot.pot -d data/locales -D bot
First 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.py
python3 -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.py
This project is licensed under the Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. See the LICENSE file for details.