/FurryGallery

FurrySnap Gallery 🐾 - ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎ Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ… ΠΏΠΈΡ‚ΠΎΠΌΡ†Π°Ρ… ΠΈ ΠΈΡ… достиТСниях πŸ†. Π”Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ с нашими Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΡƒΡˆΠΈΡΡ‚ΠΈΠΊΠ°ΠΌΠΈ Π½Π΅Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ. πŸ“Έ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ сСрвСрС, с использованиСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker 🐳, nginx 🌐, PostgreSQL 🐘 ΠΈ Django + Gunicorn 🐍. Автоматизирован Π΄Π΅ΠΏΠ»ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CI/CD πŸš€.

Primary LanguagePythonMIT LicenseMIT

FurryGallery


Nginx Docker Docker-compose Docker Hub GitHub Actions PostgreSQL gunicorn Django DRF SimpleJWT PyJWT Djoser ЛицСнзия Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

О ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

PrettyPets β€” это ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ, созданная для ΠΎΠ±ΠΌΠ΅Π½Π° фотографиями ΠΈ историями ΠΎ вашСй ΠΌΠΈΠ»ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ - Π²Π°ΡˆΠΈΡ… ΠΏΠΈΡ‚ΠΎΠΌΡ†Π°Ρ…. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ бэкСнд-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основанноС Π½Π° Django, ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ Π½Π° React. Π’Π΅ΡΡŒ процСсс развСртывания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° осущСствляСтся Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: nginx, PostgreSQL ΠΈ Django+Gunicorn. Π—Π°Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сборки Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ обновляСтся Π½Π° Docker Hub.

PrettyPets прСдоставляСт возмоТности:

  • РСгистрации Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • ДобавлСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ Π²Π°ΡˆΠΈΡ… ΠΏΠΈΡ‚ΠΎΠΌΡ†Π΅Π².
  • УдалСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΈΡ‚ΠΎΠΌΡ†Π΅Π² ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ТСланию.
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ окраски ΠΈ описания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΡ‚ΠΎΠΌΡ†Π°.
  • ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ особСнностями ΠΈ достиТСниями вашСго Π΄Ρ€ΡƒΠ³Π° Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π»Π°ΠΏΡ‹.
  • Указания Π³ΠΎΠ΄Π° роТдСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΡ‚ΠΎΠΌΡ†Π°.

FurryGallery, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, являСтся ΡƒΡŽΡ‚Π½Ρ‹ΠΌ ΡƒΠ³ΠΎΠ»ΠΊΠΎΠΌ для всСх, ΠΊΡ‚ΠΎ ΠΎΠ±ΠΎΠΆΠ°Π΅Ρ‚ кошСк. Π­Ρ‚ΠΎ спСциализированная ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ фотографиями своих ΠΏΡƒΡˆΠΈΡΡ‚Ρ‹Ρ… Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ фотографиями, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ участниками. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ GitHub Actions для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования ΠΈ развСртывания Π½Π° сСрвСрС, Ρ‡Ρ‚ΠΎ обСспСчиваСт ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ удобство использования для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° πŸ“

  • kittygram_workflow.yml: Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит настройки для Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ доставки (CI/CD), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ тСстированиС ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

  • docker-compose.production.yml: Π—Π΄Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ настройки для запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² производствСнной срСдС с использованиСм ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Docker ΠΈΠ· Docker Hub.

  • docker-compose.yml: Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит настройки для локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с локальной сборкой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker.

  • backend: Π’ этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ находится Π±Π΅ΠΊΠ΅Π½Π΄-Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π°Ρ Π·Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ взаимодСйствиС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

  • frontend: Π—Π΄Π΅ΡΡŒ располоТСна Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, написанная Π½Π° React, которая обСспСчиваСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс ΠΈ взаимодСйствиС с Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠΌ.

Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° πŸš€

Для запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: Node.js, Python ΠΈ Pip.

Frontend:

Для настройки Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-части ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

    git clone https://github.com/kluev-evga/FurryGallery.git
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°:

    cd frontend
  3. УстановитС зависимости:

    npm install
  4. ЗапуститС Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄:

    npm run dev

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния этих шагов, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎ адрСсу 127.0.0.1:3000.

Backend:

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π΅ΠΊΠ΅Π½Π΄-Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

    git clone https://github.com/kluev-evga/FurryGallery.git
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π±Π΅ΠΊΠ΅Π½Π΄Π°:

    cd backend
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅:

    python3 -m venv venv
  4. АктивируйтС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (для Linux/macOS):

    source venv/bin/activate

    Для Windows:

    source venv/scripts/activate
  5. УстановитС зависимости:

    pip install -r requirements.txt
  6. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

    python manage.py migrate
  7. ЗапуститС Π±Π΅ΠΊΠ΅Π½Π΄-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

    python manage.py runserver

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния этих шагов, Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅ΠΊΠ΅Π½Π΄-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ адрСсу 127.0.0.1:8000.

Автоматизация развСртывания: CI/CD

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развСртывания построСн Π½Π° основС CI/CD. Workflow настроСн Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ master слуТит событиСм-Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ для запуска тСстирования ΠΈ дСплоя.

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ события-Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°, GitHub Actions считываСт Ρ„Π°ΠΉΠ» с описаниСм workflow ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π½Π½Π΅Ρ€ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ-job Π² этом workflow. Π­Ρ‚ΠΈ Ρ€Π°Π½Π½Π΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ настройку Docker, сборку ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Docker Hub. ПослС этого, Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΌ сСрвСрС, производится пСрСзапуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΈΠ· свСТих ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Для выполнСния этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ€Π°Π½Π½Π΅Ρ€Ρƒ трСбуСтся аутСнтификация Π½Π° Docker Hub, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ аутСнтификация Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΌ сСрвСрС для пСрСзапуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈ другая приватная информация, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ GitHub Actions.

Π­Ρ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ сСкрСтами (secrets), ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Secrets. Π’ΠΎ врСмя выполнСния workflow, значСния ΠΈΠ· этого Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π½Π½Π΅Ρ€Ρƒ Π²ΠΎ врСмя запуска workflow.

Для Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ workflow Π² GitHub Actions, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Telegram-Π±ΠΎΡ‚ для ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

ЛицСнзия πŸ“œ

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² LICENSE.