Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
b93439d
V2.0.0 init Update
Medicopter117 Dec 14, 2025
439e472
V2.0.0 Init 2
Medicopter117 Dec 14, 2025
c3141b2
Updated: labeler.yml & label.yml
Medicopter117 Dec 14, 2025
71139ed
Updated: laber.yml
Medicopter117 Dec 14, 2025
865023a
Merge branch 'main' into 2.0.0
Medicopter117 Dec 14, 2025
1cabace
Update: Labeler.yml
Medicopter117 Dec 14, 2025
50b117f
FEAT: config.yaml wurde hingefügt
Medicopter117 Dec 25, 2025
b0f209a
FIX. github/labels.yml
Medicopter117 Dec 25, 2025
21a2c4c
FIX. github/labels.yml
Medicopter117 Dec 25, 2025
ca38a29
FIX. github/labels.yml
Medicopter117 Dec 25, 2025
1f9b0f1
FIX. github/labels.yml
Medicopter117 Dec 25, 2025
6601174
SITE: new: ToS & Privacy, new Design
Medicopter117 Dec 26, 2025
85276b0
UPDATE: gitingore
Medicopter117 Dec 26, 2025
bbf7a89
FEAT: API wurde hingefügt und ist funktionfähig
Medicopter117 Dec 26, 2025
54d028c
FEAT: API wurde geupdated aber mit dem Fehler der die den Token immer…
Medicopter117 Dec 26, 2025
679a85b
UPDATE; labeler.yml
Medicopter117 Dec 26, 2025
34ae931
Update: req.txt & docs
Medicopter117 Dec 27, 2025
31b38b3
updated
Medicopter117 Dec 27, 2025
157a109
update: req.txts
Medicopter117 Dec 27, 2025
76dc5fe
test for RTD
Medicopter117 Dec 27, 2025
50a26c4
Test for RTD
Medicopter117 Dec 27, 2025
aa0b065
test for RTD
Medicopter117 Dec 27, 2025
bf4dbbb
Remove build artifacts from repository
Medicopter117 Dec 28, 2025
f7807b2
UPDATE: req.txt
Medicopter117 Dec 28, 2025
4034e75
FEAT: Changelog & Releases added to the docs
Medicopter117 Dec 28, 2025
8a58676
UPDATE; releases
Medicopter117 Dec 28, 2025
c8c68c5
FIX: falsche Lizenzangabe
Medicopter117 Dec 28, 2025
e0f2fc9
FEAT: weather.py has a translation now
Medicopter117 Dec 28, 2025
3bade8e
FEAT: renovate.json added
Medicopter117 Dec 29, 2025
76e744f
Update dependency ezcord to v0.7.4
renovate[bot] Dec 29, 2025
fa498c0
Update dependency aiosqlite to v0.22.1
renovate[bot] Dec 29, 2025
b752ce4
Update dependency attrs to v25.4.0
renovate[bot] Dec 29, 2025
be095d3
Update dependency certifi to v2025.11.12
renovate[bot] Dec 29, 2025
bc7c9c8
Update dependency font-awesome to v6.7.2
renovate[bot] Dec 29, 2025
104e562
Update dependency propcache to v0.4.1
renovate[bot] Dec 29, 2025
a3c2ee7
Update dependency python-dotenv to v1.2.1
renovate[bot] Dec 29, 2025
166ccf1
Update dependency starlette to v0.50.0
renovate[bot] Dec 29, 2025
ae9b85f
Update dependency typing_extensions to v4.15.0
renovate[bot] Dec 29, 2025
a9ec3bf
Update dependency urllib3 to v2.6.2
renovate[bot] Dec 29, 2025
2cec028
Update dependency yarl to v1.22.0
renovate[bot] Dec 29, 2025
67db9b9
Update actions/checkout action to v6
renovate[bot] Dec 29, 2025
37963ca
Update actions/labeler action to v6
renovate[bot] Dec 29, 2025
94a6f62
Update actions/upload-pages-artifact action to v4
renovate[bot] Dec 29, 2025
fdad77c
Update dependency font-awesome to v7
renovate[bot] Dec 29, 2025
ed49c24
UPDATE: renovate.json, docs_req.txt
Medicopter117 Dec 29, 2025
978cd61
Merge pull request #58 from Oppro-net-Development/renovate/font-aweso…
Medicopter117 Dec 29, 2025
f05953e
Merge pull request #57 from Oppro-net-Development/renovate/actions-up…
Medicopter117 Dec 29, 2025
1eb3060
Merge pull request #56 from Oppro-net-Development/renovate/actions-la…
Medicopter117 Dec 29, 2025
71a6e16
UPDATE: renovate.json
Medicopter117 Dec 29, 2025
4bfdff4
Merge pull request #55 from Oppro-net-Development/renovate/actions-ch…
Medicopter117 Dec 29, 2025
1bdcc38
Merge pull request #54 from Oppro-net-Development/renovate/yarl-1.x
Medicopter117 Dec 29, 2025
1868686
Update dependency frozenlist to v1.8.0
renovate[bot] Dec 29, 2025
4637aff
Update dependency soupsieve to v2.8.1
renovate[bot] Dec 29, 2025
27d4fd3
Merge pull request #53 from Oppro-net-Development/renovate/urllib3-2.x
Medicopter117 Dec 29, 2025
f01fd5f
Update dependency idna to v3.11
renovate[bot] Dec 29, 2025
c26d088
Merge pull request #52 from Oppro-net-Development/renovate/typing_ext…
Medicopter117 Dec 29, 2025
5485ed1
Merge pull request #51 from Oppro-net-Development/renovate/starlette-0.x
Medicopter117 Dec 29, 2025
caf15a9
Merge pull request #50 from Oppro-net-Development/renovate/soupsieve-2.x
Medicopter117 Dec 29, 2025
0e473d5
Update dependency MarkupSafe to v3.0.3
renovate[bot] Dec 29, 2025
5b5b373
Update dependency beautifulsoup4 to v4.14.3
renovate[bot] Dec 29, 2025
29f6648
Merge pull request #49 from Oppro-net-Development/renovate/python-dot…
Medicopter117 Dec 29, 2025
8bbfd83
Update dependency click to v8.3.1
renovate[bot] Dec 29, 2025
5a5d61a
Merge pull request #48 from Oppro-net-Development/renovate/propcache-0.x
Medicopter117 Dec 29, 2025
f3747d2
Merge pull request #47 from Oppro-net-Development/renovate/idna-3.x
Medicopter117 Dec 29, 2025
43900de
Update dependency requests to v2.32.5
renovate[bot] Dec 29, 2025
e20c359
Merge pull request #46 from Oppro-net-Development/renovate/frozenlist…
Medicopter117 Dec 29, 2025
4fa91f3
Merge branch '2.0.0' into renovate/font-awesome-6.x
Medicopter117 Dec 29, 2025
b2231f9
Merge pull request #44 from Oppro-net-Development/renovate/click-8.x
Medicopter117 Dec 29, 2025
6d0e90c
Merge pull request #43 from Oppro-net-Development/renovate/certifi-20…
Medicopter117 Dec 29, 2025
2e7121c
Update dependency charset-normalizer to v3.4.4
renovate[bot] Dec 29, 2025
0836635
Update dependency anyio to v4.12.0
renovate[bot] Dec 29, 2025
56ce9c6
Merge pull request #34 from Oppro-net-Development/renovate/charset-no…
Medicopter117 Dec 29, 2025
d0e0877
Merge pull request #35 from Oppro-net-Development/renovate/ezcord-0.x
Medicopter117 Dec 29, 2025
25d7bfa
Merge pull request #42 from Oppro-net-Development/renovate/beautifuls…
Medicopter117 Dec 29, 2025
558b149
Merge pull request #41 from Oppro-net-Development/renovate/attrs-25.x
Medicopter117 Dec 29, 2025
b9fc2eb
Merge pull request #40 from Oppro-net-Development/renovate/anyio-4.x
Medicopter117 Dec 29, 2025
9c49edf
Update dependency typing-inspection to v0.4.2
renovate[bot] Dec 29, 2025
ce5fdd3
Merge pull request #39 from Oppro-net-Development/renovate/aiosqlite-0.x
Medicopter117 Dec 29, 2025
b43b42a
Merge pull request #38 from Oppro-net-Development/renovate/typing-ins…
Medicopter117 Dec 29, 2025
d1c3b3b
Merge pull request #37 from Oppro-net-Development/renovate/requests-2.x
Medicopter117 Dec 29, 2025
800aec9
Merge pull request #36 from Oppro-net-Development/renovate/markupsafe…
Medicopter117 Dec 29, 2025
f3151b2
Merge pull request #45 from Oppro-net-Development/renovate/font-aweso…
Medicopter117 Dec 29, 2025
6ab00af
Updated
Medicopter117 Dec 29, 2025
d88fc21
Abschluss laufender Merge
Medicopter117 Dec 29, 2025
88f6331
Updated renovate.json
Medicopter117 Dec 29, 2025
00eb209
Merge branch 'main' into 2.0.0
Medicopter117 Dec 30, 2025
7a34025
Merge branch 'main' into 2.0.0
Medicopter117 Dec 30, 2025
fac5433
FEAT: AutoRole
Medicopter117 Dec 31, 2025
70e9dbb
Merge branch '2.0.0' of https://github.com/Oppro-net-Development/Mana…
Medicopter117 Dec 31, 2025
3085916
UPDATE: static.yml
Medicopter117 Jan 2, 2026
7eac229
FIX. static.yml
Medicopter117 Jan 2, 2026
adf9f79
Update actions/checkout action to v6
renovate[bot] Jan 2, 2026
94c263a
Merge pull request #62 from Oppro-net-Development/renovate/actions-ch…
Medicopter117 Jan 2, 2026
51beda3
Merge branch 'main' into 2.0.0
Medicopter117 Jan 2, 2026
46b9280
SITE: FIX: Footer of Index.html
Medicopter117 Jan 2, 2026
6f6f265
FIXES
Medicopter117 Jan 2, 2026
f8f3a86
FIXES
Medicopter117 Jan 2, 2026
dd453b8
Update actions/upload-pages-artifact action to v4
renovate[bot] Jan 3, 2026
9e02481
FEAT: assets/ & README
Medicopter117 Jan 3, 2026
cb081ba
Merge pull request #63 from Oppro-net-Development/renovate/actions-up…
Medicopter117 Jan 3, 2026
a661f89
UPDATE: docs/
Medicopter117 Jan 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ jobs:

steps:
# Schritt 1: Fügt den Checkout-Schritt hinzu, um die Dateien lokal abzurufen
- uses: actions/checkout@v4
- uses: actions/checkout@v6

# Schritt 2: Führt den Labeler aus.
- uses: actions/labeler@v5
- uses: actions/labeler@v6
with:
# configuration-path ist jetzt optional, aber sicherheitshalber belassen wir ihn
configuration-path: .github/labeler.yml
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: Deploy static content to Pages

on:
# Runs on pushes targeting the default branch
# Runs on pushes targeting the 2.0.0 branch
push:
branches: ["2.0.0"]

Expand All @@ -15,29 +15,29 @@ permissions:
pages: write
id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
# Allow only one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: false

jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6 # Updated to stable v4

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v4
with:
# Upload entire repository
path: 'site'
# This points to your specific folder
path: 'site/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v4
12 changes: 2 additions & 10 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ DevTools/backend/utils/config.py
command.yaml
wiki_stats.json
checker.py
bot_stats.json

# Build-Ordner: alles ignorieren...
_build/*
Expand All @@ -39,13 +40,4 @@ docs/_build/html/_sources/
furo.js.LICENSE.txt
fontawesome.js.LICENSE.txt
.map
docs/_build/doctrees/


# ...außer HTML & CSS im html-Ordner
!_build/html/
!_build/html/**/*.html
!_build/html/**/*.css
!_build/html/_static/
!_build/html/_static/**/*.css
!_build/html/_static/**/*.js
docs/_build/*
21 changes: 17 additions & 4 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@

# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

# Set the OS, Python version, and other tools you might need
build:
os: ubuntu-24.04
tools:
python: "3.12"

# Build documentation in the "docs/" directory with Sphinx
sphinx:
configuration: docs/conf.py

# Optionally, but recommended,
# declare the Python requirements required to build your documentation
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
# python:
# install:
# - requirements: docs/requirements.txt
python:
install:
- requirements: docs/req.txt # <- hier die Datei für die Docs

sphinx:
configuration: docs/conf.py # Pfad zu deiner conf.py
- requirements: requirements/docs_req.txt
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

from .config import *

from .utils import *

from .logging import *
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
from .spam_db import *
from .notes_db import *
from .Stats_db import *
from .globalchat_db import db as globalchat_db
from .globalchat_db import db as GlobalChatDatabase
from .levelsystem_db import *
from .logging_db import *
from .autodelete_db import *
from .welcome_db import *
from .welcome_db import *
from .lang_db import *
from .autorole_db import AutoRoleDatabase
102 changes: 102 additions & 0 deletions DevTools/backend/database/autorole_db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import aiosqlite
import random
import string
import os

class AutoRoleDatabase:
def __init__(self, db_path="data/autorole.db"):
self.db_path = db_path
# Erstellt den Ordner 'data', falls er fehlt
directory = os.path.dirname(self.db_path)
if directory and not os.path.exists(directory):
os.makedirs(directory, exist_ok=True)

async def init_db(self):
"""Erstellt die Tabelle, falls sie noch nicht existiert"""
async with aiosqlite.connect(self.db_path) as db:
await db.execute("""
CREATE TABLE IF NOT EXISTS autoroles (
autorole_id TEXT PRIMARY KEY,
guild_id INTEGER NOT NULL,
role_id INTEGER NOT NULL,
enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
await db.commit()

def generate_autorole_id(self, guild_id: int, role_id: int):
guild_part = str(guild_id)[-2:].zfill(2)
role_part = str(role_id)[-2:].zfill(2)
random_part = ''.join(random.choices(string.digits, k=3))
return f"{guild_part}-{role_part}-{random_part}"

async def add_autorole(self, guild_id: int, role_id: int):
# WICHTIG: Erst sicherstellen, dass die Tabelle da ist!
await self.init_db()

autorole_id = self.generate_autorole_id(guild_id, role_id)

async with aiosqlite.connect(self.db_path) as db:
# Check ob ID existiert
while True:
async with db.execute(
"SELECT autorole_id FROM autoroles WHERE autorole_id = ?",
(autorole_id,)
) as cursor:
if not await cursor.fetchone():
break
autorole_id = self.generate_autorole_id(guild_id, role_id)

await db.execute("""
INSERT INTO autoroles (autorole_id, guild_id, role_id, enabled)
VALUES (?, ?, ?, 1)
""", (autorole_id, guild_id, role_id))
await db.commit()

return autorole_id

async def get_all_autoroles(self, guild_id: int):
await self.init_db()
async with aiosqlite.connect(self.db_path) as db:
async with db.execute(
"SELECT autorole_id, role_id, enabled FROM autoroles WHERE guild_id = ?",
(guild_id,)
) as cursor:
rows = await cursor.fetchall()
return [{"autorole_id": r[0], "role_id": r[1], "enabled": bool(r[2])} for r in rows]

async def get_autorole(self, autorole_id: str):
await self.init_db()
async with aiosqlite.connect(self.db_path) as db:
async with db.execute(
"SELECT autorole_id, guild_id, role_id, enabled FROM autoroles WHERE autorole_id = ?",
(autorole_id,)
) as cursor:
row = await cursor.fetchone()
return {"autorole_id": row[0], "guild_id": row[1], "role_id": row[2], "enabled": bool(row[3])} if row else None

async def get_enabled_autoroles(self, guild_id: int):
await self.init_db()
async with aiosqlite.connect(self.db_path) as db:
async with db.execute(
"SELECT role_id FROM autoroles WHERE guild_id = ? AND enabled = 1",
(guild_id,)
) as cursor:
rows = await cursor.fetchall()
return [r[0] for r in rows]

async def remove_autorole(self, autorole_id: str):
await self.init_db()
async with aiosqlite.connect(self.db_path) as db:
await db.execute("DELETE FROM autoroles WHERE autorole_id = ?", (autorole_id,))
await db.commit()

async def toggle_autorole(self, autorole_id: str, enabled: bool):
await self.init_db()
async with aiosqlite.connect(self.db_path) as db:
await db.execute(
"UPDATE autoroles SET enabled = ? WHERE autorole_id = ?",
(1 if enabled else 0, autorole_id)
)
await db.commit()
46 changes: 46 additions & 0 deletions DevTools/backend/database/lang_db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# src/database/settings_db.py

import sqlite3
import os
from datetime import datetime

class SettingsDB:
"""
Datenbank-Klasse zur Verwaltung von Benutzer- und Servereinstellungen.
"""
def __init__(self, db_path="data/settings.db"):
self.db_path = db_path
os.makedirs(os.path.dirname(self.db_path), exist_ok=True)
self.conn = sqlite3.connect(self.db_path)
self.cursor = self.conn.cursor()
self.create_tables()
print(f"[{datetime.now().strftime('%H:%M:%S')}] [DATABASE] Settings Database initialized ✓")

def create_tables(self):
"""Erstellt die Benutzereinstellungen-Tabelle, falls sie nicht existiert."""
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS user_settings (
user_id INTEGER PRIMARY KEY,
language TEXT NOT NULL DEFAULT 'en'
)
""")
self.conn.commit()

def set_user_language(self, user_id: int, lang_code: str):
"""Speichert den Sprachcode für einen Benutzer."""
self.cursor.execute("""
INSERT OR REPLACE INTO user_settings (user_id, language)
VALUES (?, ?)
""", (user_id, lang_code))
self.conn.commit()

def get_user_language(self, user_id: int) -> str:
"""Ruft den Sprachcode für einen Benutzer ab. Standard: 'en'."""
self.cursor.execute("SELECT language FROM user_settings WHERE user_id = ?", (user_id,))
result = self.cursor.fetchone()

# 'en' als gewünschter Standard, falls kein Eintrag gefunden wird
return result[0] if result else 'en'

def close(self):
self.conn.close()
File renamed without changes.
1 change: 1 addition & 0 deletions DevTools/backend/utils/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .config import *
File renamed without changes.
File renamed without changes.
Loading