diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..05024e2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.venv +venv +Dockerfile +docker-compose.yaml +__pycache__ +.idea \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ecbfcaa --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +.venv \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ffdce5e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM docker.io/python:3.12-slim as builder +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +COPY requirements.txt . +RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt + +FROM docker.io/python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +RUN useradd --no-create-home --system user && mkdir /data && chown user:user /data + +ENV DB_PATH /data/presence-tracker.sqlite + +WORKDIR /app +COPY --from=builder /app/wheels /wheels +COPY --from=builder /app/requirements.txt . + +RUN pip install --no-cache /wheels/* +USER user +COPY . . + +ENTRYPOINT ["python3", "/app/main.py"] diff --git a/PresenceTracker.py b/PresenceTracker.py index b1d0337..30f5147 100644 --- a/PresenceTracker.py +++ b/PresenceTracker.py @@ -4,7 +4,7 @@ from loguru import logger from datetime_utils import to_unix -def get_db() -> sqlite3.Connection: +def get_db(db_path) -> sqlite3.Connection: SCHEMA = """ create table if not exists activities ( id integer primary key autoincrement, @@ -25,13 +25,13 @@ def get_db() -> sqlite3.Connection: foreign key (activity_name_id) references activities(id) );""" - db = sqlite3.connect('presence-tracker.sqlite') + db = sqlite3.connect(db_path) db.executescript(SCHEMA) return db class PresenceTracker: - def __init__(self, db: sqlite3.Connection = get_db()): + def __init__(self, db: sqlite3.Connection): self.db = db def log_activity(self, user_id: int, activity_name: str, start_time: datetime, end_time: datetime | None = None): diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..7757652 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,15 @@ +services: + discord-presence-tracker: + image: https://gitea.demb.uk/norohind/discord-presence-tracker.git + restart: unless-stopped + read_only: true + environment: + - LOGURU_LEVEL=INFO + - TOKEN + + volumes: + - discord-presence-tracker-vol:/data + +volumes: + discord-presence-tracker-vol: + external: true \ No newline at end of file diff --git a/main.py b/main.py index f6181fa..7c76fc2 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,7 @@ from typing import Any from itertools import chain from loguru import logger -from PresenceTracker import PresenceTracker +from PresenceTracker import PresenceTracker, get_db import discord from discord.ext.commands import Bot as BotBase from pathlib import Path @@ -104,7 +104,9 @@ async def async_main(): intents.presences = True intents.members = True - activity_tracker = PresenceTracker() + db = get_db(os.environ['DB_PATH']) + + activity_tracker = PresenceTracker(db) bot = Bot(intents=intents, activity_tracker=activity_tracker, command_prefix='') for sig in (signal.SIGTERM, signal.SIGINT):