Added docker support

This commit is contained in:
2026-09-07 03:56:11 +03:00
parent 1077fc1d5f
commit a0e88bea96
6 changed files with 90 additions and 1 deletions

10
.dockerignore Normal file
View File

@@ -0,0 +1,10 @@
.venv/
session_storage/
__pycache__/
temp/
runtime/
*.swp
*.swo
*.vscode
*.json
*.sqlite

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
session_storage/
__pycache__/
temp/
runtime/
*.swp
*.swo
*.vscode

17
Dockerfile Normal file
View File

@@ -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" ]

View File

@@ -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` в рабочей директории. Используйте

View File

@@ -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, "<strong>Скачано, загрузка в Matrix...</strong>", True)
# upload
try:

34
requirements.txt Normal file
View File

@@ -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