diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cdb2bf2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.venv/ +session_storage/ +__pycache__/ +temp/ +runtime/ +*.swp +*.swo +*.vscode +*.json +*.sqlite diff --git a/.gitignore b/.gitignore index 42d3837..cdb2bf2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ session_storage/ __pycache__/ temp/ +runtime/ *.swp *.swo *.vscode diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c918049 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-slim + +RUN apt-get update && apt-get install --no-install-recommends -y libolm3 libolm-dev git libmagic-dev ffmpeg && rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/src/app + +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt +RUN pip install -U "yt-dlp[default,curl-cffi]" + +COPY . . + +WORKDIR /runtime +RUN chown -R 1000:1000 /usr/src /runtime + +USER 1000:1000 +CMD [ "python", "/usr/src/app/main.py" ] \ No newline at end of file diff --git a/README.md b/README.md index 2173707..cf92e7e 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,29 @@ Matrix бот для скачивания видео/аудио с *YouTube, Pin > В системе должны быть установлены `ffmpeg`, `ffprobe` и `yt-dlp`. +## Для запуска рекомендуется `docker` + +1. Соберите образ +```bash +sudo docker build -t 2026-matrix-down . +``` +2. Выполните первый запуск в интерактивном режиме +```bash +sudo mkdir runtime +sudo chown 1000:1000 runtime +sudo docker run -v ./runtime:/runtime -ti 2026-matrix-down +``` +3. В папке `runtime` появится файл `config.json`. Внесите туда нужные настройки +4. Запустите ещё раз в интерактивном режиме, чтобы авторизоваться +```bash +sudo docker run -v ./runtime:/runtime -ti 2026-matrix-down +``` +5. Дальше можно запускать контейнер в фоне +```bash +sudo docker run-v ./runtime:/runtime --detach 2026-matrix-down +``` +> Рекомендуется запускать контейнер при помощи `docker compose`. + ## Работа с ботом Первый запуск сгенерирует файл `config.json` в рабочей директории. Используйте diff --git a/logic.py b/logic.py index 6741a0b..8743003 100644 --- a/logic.py +++ b/logic.py @@ -33,7 +33,11 @@ async def worker_download(room: MatrixRoom, text: RoomMessageText) -> None: await _bot.send_text_to_room(room.room_id, response, True) # get formats d = Downloader(text.body) - result = await d.download_video("temp") + try: + result = await d.download_video("temp") + except: + await _bot.send_text_to_room(room.room_id, traceback.format_exc(), False) + return await _bot.send_text_to_room(room.room_id, "Скачано, загрузка в Matrix...", True) # upload try: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..21693a4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,34 @@ +aioconsole==0.8.2 +aiofiles==25.1.0 +aiohappyeyeballs==2.7.1 +aiohttp==3.14.3 +aiohttp_socks==0.12.0 +aiosignal==1.4.0 +atomicwrites==1.4.1 +attrs==26.1.0 +build==1.5.0 +cachetools==7.1.7 +frozenlist==1.8.0 +h11==0.16.0 +h2==4.4.1 +hpack==4.2.0 +hyperframe==6.1.0 +idna==3.19 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +mab @ git+https://git.tyukalov.su/nikita/mab@v0.2.0 +matrix-nio==0.26.0 +multidict==6.7.1 +packaging==26.3 +peewee==3.19.0 +pillow==12.3.0 +propcache==0.5.2 +pycryptodome==3.23.0 +pyproject_hooks==1.2.0 +python-magic==0.4.27 +python-socks==3.0.0 +referencing==0.37.0 +rpds-py==2026.6.3 +unpaddedbase64==2.1.0 +vodozemac==0.10.0 +yarl==1.24.5