diff --git a/.github/labeler.yml b/.github/labeler.yml index e5f2113..bc486f7 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -18,28 +18,12 @@ documentation: site: - any: - changed-files: - - any-glob-to-any-file: 'site/**' + - any-glob-to-any-file: 'src/web/**' example: - any: - changed-files: - - any-glob-to-any-file: 'example/**' - -backend: -- any: - - changed-files: - - any-glob-to-any-file: 'src/DevTools/backend/**' - - any-glob-to-any-file: 'site/backend/**' - -ui: -- any: - - changed-files: - - any-glob-to-any-file: 'src/DevTools/ui/**' - -static: -- any: - - changed-files: - - any-glob-to-any-file: 'site/static/**' + - any-glob-to-any-file: 'examples/**' translation-message: - any: diff --git a/agb.html b/agb.html index be3ec36..e23dacd 100644 --- a/agb.html +++ b/agb.html @@ -6,9 +6,7 @@ Nutzungsbedingungen (AGB) - ManagerX - - - + diff --git a/datenschutz.html b/datenschutz.html index e8a4750..8f6aa19 100644 --- a/datenschutz.html +++ b/datenschutz.html @@ -6,9 +6,7 @@ Datenschutz - ManagerX - - - + diff --git a/docs/source/dev_guide/index.rst b/docs/source/dev_guide/index.rst deleted file mode 100644 index b447d5c..0000000 --- a/docs/source/dev_guide/index.rst +++ /dev/null @@ -1,4 +0,0 @@ -Developer Guide -======================= - -Welcome to the \ No newline at end of file diff --git a/docs/source/user_guide/index.rst b/docs/source/user_guide/index.rst deleted file mode 100644 index 8ecefb2..0000000 --- a/docs/source/user_guide/index.rst +++ /dev/null @@ -1,230 +0,0 @@ -======================= -👥 User Guide -======================= - -**Welcome to the ManagerX User Guide!** - -This documentation is designed for everyone who uses ManagerX on their Discord server. From server owners to moderators to regular members, you'll find guides for getting started, using commands, managing configurations, and troubleshooting issues. - -.. note:: - **New to ManagerX?** Start with :doc:`quick_start/index` guide for a step-by-step introduction. - -.. important:: - ManagerX is actively developed and regularly updated with new features. Check back frequently for documentation updates! - ---- - -🚀 Getting Started -=================== - -**First time using ManagerX?** Follow these steps: - -1. **Add the Bot** → :doc:`quick_start/index` (5 minutes) -2. **Set Up Your Server** → :doc:`setup_guide/index` (15 minutes) -3. **Learn the Features** → :doc:`features/index` -4. **Explore Commands** → :doc:`commands/index` - -That's it! ManagerX is ready to use. - ---- - -📚 Documentation Overview -========================== - -**Quick Start** - -- :doc:`quick_start/index` — Add ManagerX to your server in minutes -- Getting bot token -- Permissions setup -- Initial configuration - -**Features & Capabilities** - -- :doc:`features/index` — Overview of all ManagerX features -- Moderation tools -- Entertainment commands -- Statistics and profiles -- Server management - -**Commands & Usage** - -- :doc:`commands/index` — Complete command reference -- Slash command syntax -- Examples for each command -- Permission requirements - -**Configuration** - -- :doc:`setup_guide/index` — Detailed server setup guide -- Role configuration -- Channel setup -- Moderation settings -- XP system configuration - -- :doc:`configuration/index` — All configuration options -- Advanced settings -- Best practices -- Optimization tips - -**Help & Support** - -- :doc:`faq/index` — Frequently asked questions -- Common scenarios -- Quick answers - -- :doc:`troubleshooting/index` — Solving problems -- Bot not responding -- Permission issues -- Command errors -- Performance problems - ---- - -🎯 Feature Categories -====================== - -ManagerX is organized into these main categories: - -**🛡️ Moderation** - -Keep your server safe and organized: - -- Anti-spam detection -- Warning system -- User timeouts and mutes -- Kick and ban functions -- Comprehensive action logging -- Slowmode management - -See :doc:`commands/index` for moderation command reference. - -**🎮 Entertainment & Fun** - -Keep members engaged with games and fun commands: - -- Tic Tac Toe game -- Connect 4 game -- Wikipedia search and facts -- Jokes and memes -- Weather information -- Interactive interactions - -See :doc:`features/index` for entertainment features. - -**📊 Statistics & Profiles** - -Track and display member activity: - -- User profiles with XP -- Server statistics -- Member leaderboards -- Message tracking -- Achievement system -- Activity reports - -See :doc:`commands/index` for stats commands. - -**⚙️ Server Management** - -Customize and control your server: - -- Auto-role assignment -- Welcome/goodbye messages -- Channel management -- Prefix configuration -- Global chat networks -- Logging channels - -See :doc:`setup_guide/index` for setup instructions. - -**📈 Dashboard** - -View real-time server statistics and status: - -- Live bot status -- Server member count -- Bot latency -- Uptime tracking -- Database status - -Access at: ``http://your-domain/status`` - ---- - -💡 Quick Reference -==================== - -**Most Popular Commands** - -- ``/stats`` — View your profile and statistics -- ``/warn @user reason`` — Warn a user -- ``/serverinfo`` — Display server information -- ``/profile`` — Your personal profile -- ``/leaderboard`` — Top members by XP - -See :doc:`commands/index` for the complete command list. - -**Common Tasks** - -- **Add bot to server** → :doc:`quick_start/index` -- **Set up moderation** → :doc:`setup_guide/index` -- **Configure roles** → :doc:`setup_guide/index` -- **Change settings** → :doc:`configuration/index` -- **Enable features** → :doc:`features/index` -- **Troubleshoot issues** → :doc:`troubleshooting/index` - ---- - -🆘 Need Help? -=============== - -**My Question Isn't Answered** - -1. Search the documentation using the search bar -2. Check :doc:`faq/index` for common questions -3. Review :doc:`troubleshooting/index` for problems - -**Found a Bug?** - -Report it on `GitHub Issues `_ with: - -- Exact error message -- Steps to reproduce -- Your ManagerX version -- Bot and Discord version - -**Need Immediate Help?** - -- Join our Discord community -- Ask in #support channel -- Community members are usually quick to help! - -**Feature Request?** - -Suggest new features on GitHub or in our Discord community! - ---- - -✨ Pro Tips -============ - -✅ **Use slash commands** — They're faster and more user-friendly than prefix commands - -✅ **Configure permissions** — Control who can use which commands - -✅ **Set up logging** — Track moderation actions in a dedicated channel - -✅ **Enable auto-roles** — Automatically assign roles to new members - -✅ **Customize welcome messages** — Greet new members with a personal touch - -✅ **Monitor the dashboard** — Check server statistics anytime - -✅ **Read announcements** — Stay updated with new features - ---- - -📋 Navigation Guide -==================== - -Use these sections to find what you need: diff --git a/examples/bot/cog.py b/examples/bot/cog.py new file mode 100644 index 0000000..8657882 --- /dev/null +++ b/examples/bot/cog.py @@ -0,0 +1,9 @@ +import discord +import ezcord + +class Cog(ezcord.Cog): # Create a cog + def __init__(self, bot): # Initialize the cog + self.bot = bot # Set the bot + +def setup(bot): + bot.add_cog(Cog(bot)) # Add the cog to the bot \ No newline at end of file diff --git a/examples/bot/containers.py b/examples/bot/containers.py index c3ae647..264dfb8 100644 --- a/examples/bot/containers.py +++ b/examples/bot/containers.py @@ -12,7 +12,7 @@ def __init__(self, bot): @discord.slash_command(name="container", description="Zeigt ein Container an") async def container(self, ctx: discord.ApplicationContext): container = Container() # Define the Container - container.add_text("Hello World") # Add a Text to the Container + container.add_text("## Hello World") # Add a Markdown Text to the Container container.add_separator() # Add a Separator to the Container container.add_text("Hello World") # Add a Text to the Container view = discord.ui.DesignerView(container, timeout=0) # Define the View diff --git a/examples/bot/slash_command.py b/examples/bot/slash_command.py new file mode 100644 index 0000000..bf8f46e --- /dev/null +++ b/examples/bot/slash_command.py @@ -0,0 +1,14 @@ +import discord +import ezcord +from discord import slash_command + +class SlashCommand(ezcord.Cog): + def __init__(self, bot): + self.bot = bot + + @slash_command(name="ping", description="Pong!") # Create a slash command + async def ping(self, ctx): # Define the slash command + await ctx.respond("Pong!") # Send a message + +def setup(bot): + bot.add_cog(SlashCommand(bot)) \ No newline at end of file diff --git a/impressum.html b/impressum.html index 2284dec..9c194cb 100644 --- a/impressum.html +++ b/impressum.html @@ -6,9 +6,7 @@ Impressum - ManagerX - - - + diff --git a/index.html b/index.html index def070b..e82ed54 100644 --- a/index.html +++ b/index.html @@ -3,11 +3,11 @@ - ManagerX - Der ultimative Discord Bot + ManagerX - Discord Bot - + diff --git a/main.py b/main.py index 05a36d5..11db1ed 100644 --- a/main.py +++ b/main.py @@ -36,9 +36,9 @@ # API Routes für Dashboard from src.api.dashboard.routes import set_bot_instance, router as dashboard_router -# ============================================================================= +# ============================================================================ # SETUP -# ============================================================================= +# ============================================================================ BASEDIR = Path(__file__).resolve().parent load_dotenv(dotenv_path=BASEDIR / 'config' / '.env') colorama_init(autoreset=True) diff --git a/src/api/dashboard/routes.py b/src/api/dashboard/routes.py index 2ed0e7a..49eee8e 100644 --- a/src/api/dashboard/routes.py +++ b/src/api/dashboard/routes.py @@ -1,13 +1,15 @@ -from fastapi import APIRouter, Request, HTTPException +from fastapi import APIRouter, Request, HTTPException, Security, status +from fastapi.security import APIKeyHeader +import os from typing import List, Optional from datetime import datetime import time # Falls du Schemas nutzt: from .schemas import ServerStatus, UserInfo # Wir erstellen einen Router, den wir später in die Haupt-App einbinden -router = APIRouter( +router_public = APIRouter( prefix="/v1/managerx", - tags=["dashboard"] + tags=["public"] ) # Global Bot-Referenz (wird später in main.py gesetzt) @@ -25,7 +27,7 @@ def set_bot_instance(bot): bot_instance = bot -@router.get("/stats", response_model=dict) +@router_public.get("/stats", response_model=dict) async def get_stats(request: Request): """ Endpoint to get the current server status with real bot data. @@ -59,4 +61,32 @@ async def get_stats(request: Request): return server_status except Exception as e: raise HTTPException(status_code=500, detail=str(e)) - \ No newline at end of file + + +API_KEY_HEADER = APIKeyHeader(name="X-API-Key", auto_error=False) + +async def get_api_key(api_key_header: str = Security(API_KEY_HEADER)): + """Überprüft den API-Key aus dem Header.""" + allowed_keys = os.getenv("DASHBOARD_API_KEYS") + + if not allowed_keys: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="Keine API-Keys konfiguriert (DASHBOARD_API_KEYS fehlt)" + ) + + key_list = [k.strip() for k in allowed_keys.split(",") if k.strip()] + + if not api_key_header or api_key_header not in key_list: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="Zugriff verweigert: Ungültiger API-Key" + ) + return api_key_header + +router = APIRouter( + prefix="/v1/managerx/dashboard", + tags=["dashboard"], + dependencies=[Security(get_api_key)] +) +router.include_router(router_public) diff --git a/src/bot/cogs/bot/about.py b/src/bot/cogs/bot/about.py index e6fb919..c3c07e8 100644 --- a/src/bot/cogs/bot/about.py +++ b/src/bot/cogs/bot/about.py @@ -1,20 +1,16 @@ -# Copyright (c) 2025 OPPRO.NET Network +from datetime import datetime +import platform import discord from discord.ext import commands import ezcord -from datetime import datetime -import platform -import sys -import time -from discord.ui import Container - +from mx_handler import TranslationHandler -class AboutCog(commands.Cog): +class About(ezcord.Cog): def __init__(self, bot): self.bot = bot - # Fallback for uptime if bot.uptime is not set - if not hasattr(self.bot, 'uptime'): - self.bot.uptime = datetime.now() + # Fallback for uptime if bot.start_time is not set + if not hasattr(self.bot, 'start_time'): + self.bot.start_time = datetime.now() @discord.slash_command(name="about", description="Zeigt Informationen über den Bot an") async def about(self, ctx: discord.ApplicationContext): @@ -27,7 +23,7 @@ async def about(self, ctx: discord.ApplicationContext): ezcord_version = ezcord.__version__ # Calculate uptime - uptime = discord.utils.format_dt(self.bot.uptime, style="R") + uptime = discord.utils.format_dt(self.bot.start_time, style="R") # Calculate ping ping = f"**{round(self.bot.latency * 1000)}ms**" @@ -37,50 +33,59 @@ async def about(self, ctx: discord.ApplicationContext): member_count = sum(g.member_count for g in self.bot.guilds) # Create Container - container = Container() + container = discord.ui.Container() # Header - container.add_text(f"# ℹ️ Über {self.bot.user.name}") - container.add_text( - "Ein fortschrittlicher Management-Bot entwickelt für professionelle Communities.\n" - "ManagerX bietet umfangreiche Tools für Moderation, Statistiken und Server-Verwaltung." - ) + title = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.title") + description = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.description") + + container.add_text(title) + container.add_text(description) container.add_separator() # Development - container.add_text("## 👨💻 Entwicklung") - container.add_text( - "Entwickelt von **ManagerX Development**\n" - "❯ [🌐 Website](https://managerx-bot.de)\n" - "❯ [💬 Support Server](https://discord.gg/uDDWzsZNzD)" - ) + dev_header = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.dev_header") + dev_info = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.dev_info") + + container.add_text(dev_header) + container.add_text(dev_info) container.add_separator() # Stats - container.add_text("## 📊 Statistiken") - container.add_text( - f"❯ **Server:** `{server_count}`\n" - f"❯ **User:** `{member_count:,}`\n" - f"❯ **Ping:** {ping}\n" - f"❯ **Uptime:** {uptime}" + stats_header = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.stats_header") + stats_info = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.stats_info", + server_count=server_count, + member_count=f"{member_count:,}", + ping=ping, + uptime=uptime ) + + container.add_text(stats_header) + container.add_text(stats_info) container.add_separator() # Technical - container.add_text("## 🛠️ Technik & Versionen") - container.add_text( - f"❯ **Python:** `v{python_version}`\n" - f"❯ **PyCord:** `v{discord_version}`\n" - f"❯ **EzCord:** `v{ezcord_version}`" + tech_header = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.tech_header") + tech_info = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.tech_info", + python_version=python_version, + discord_version=discord_version, + ezcord_version=ezcord_version ) + + container.add_text(tech_header) + container.add_text(tech_info) container.add_separator() # Footer - container.add_text(f"{datetime.now().year} ManagerX Development • ManagerX v2.0.0") + footer = await TranslationHandler.get_for_user(self.bot, ctx.author.id, "cog_about.messages.footer", + year=datetime.now().year, + version="2.0.0" + ) + container.add_text(footer) # Send View view = discord.ui.DesignerView(container, timeout=0) await ctx.respond(view=view) def setup(bot): - bot.add_cog(AboutCog(bot)) \ No newline at end of file + bot.add_cog(About(bot)) \ No newline at end of file diff --git a/src/bot/cogs/fun/4gewinnt.py b/src/bot/cogs/fun/4gewinnt.py index 1fd08a4..cf25516 100644 --- a/src/bot/cogs/fun/4gewinnt.py +++ b/src/bot/cogs/fun/4gewinnt.py @@ -696,7 +696,7 @@ async def on_timeout(self): # ─────────────────────────────────────────────── # >> Cog # ─────────────────────────────────────────────── -class Connect4Cog(ezcord.Cog, group="fun"): +class fun(ezcord.Cog): @commands.slash_command(name="connect4", description="Starte ein 4 Gewinnt Spiel!") async def connect4( @@ -825,4 +825,4 @@ async def stats(self, ctx: discord.ApplicationContext, user: Optional[discord.Me await ctx.respond(embed=embed) def setup(bot): - bot.add_cog(Connect4Cog(bot)) \ No newline at end of file + bot.add_cog(fun(bot)) \ No newline at end of file diff --git a/src/bot/cogs/fun/tictactoe.py b/src/bot/cogs/fun/tictactoe.py index b9fd25b..7d0e75b 100644 --- a/src/bot/cogs/fun/tictactoe.py +++ b/src/bot/cogs/fun/tictactoe.py @@ -500,7 +500,7 @@ async def on_timeout(self): # ─────────────────────────────────────────────── # >> Cog # ─────────────────────────────────────────────── -class fun(ezcord.Cog): +class tictactoe(ezcord.Cog, group="fun"): def __init__(self, bot): self.bot = bot @@ -625,4 +625,4 @@ async def stats(self, ctx: discord.ApplicationContext, user: Optional[discord.Me await ctx.respond(embed=embed) def setup(bot): - bot.add_cog(fun(bot)) \ No newline at end of file + bot.add_cog(tictactoe(bot)) \ No newline at end of file diff --git a/src/bot/cogs/guild/globalchat.py b/src/bot/cogs/guild/globalchat.py index daa4686..73caebc 100644 --- a/src/bot/cogs/guild/globalchat.py +++ b/src/bot/cogs/guild/globalchat.py @@ -736,7 +736,7 @@ async def send_global_message(self, message: discord.Message, attachment_data: L return successful_sends, failed_sends -class GlobalChatCog(ezcord.Cog): +class GlobalChat(ezcord.Cog): """Haupt-Cog für das GlobalChat-System""" globalchat = SlashCommandGroup("globalchat", "GlobalChat Verwaltung") @@ -1515,4 +1515,4 @@ def setup(bot): # Stelle sicher, dass die Datenbank initialisiert wird, falls nicht schon geschehen GlobalChatDatabase().create_tables() # Füge die Cog hinzu - bot.add_cog(GlobalChatCog(bot)) \ No newline at end of file + bot.add_cog(GlobalChat(bot)) \ No newline at end of file diff --git a/src/bot/cogs/guild/levelsystem.py b/src/bot/cogs/guild/levelsystem.py index e669b69..a3cce5e 100644 --- a/src/bot/cogs/guild/levelsystem.py +++ b/src/bot/cogs/guild/levelsystem.py @@ -10,7 +10,7 @@ import csv from typing import Optional from discord.ui import Container - +import ezcord class PrestigeConfirmView(discord.ui.View): def __init__(self, db, user, guild): @@ -56,7 +56,7 @@ async def cancel_prestige(self, interaction: discord.Interaction, button: discor await interaction.response.edit_message(embed=embed, view=None) -class LevelSystem(commands.Cog): +class LevelSystem(ezcord.Cog): def __init__(self, bot): self.bot = bot self.db = LevelDatabase() diff --git a/src/bot/cogs/guild/loggingsystem.py b/src/bot/cogs/guild/loggingsystem.py index 818a863..8fb1e60 100644 --- a/src/bot/cogs/guild/loggingsystem.py +++ b/src/bot/cogs/guild/loggingsystem.py @@ -8,14 +8,14 @@ from typing import Dict, Set, Optional, List import asyncio import logging - +import ezcord # Import our separate database class from DevTools import LoggingDatabase # Setup logging logger = logging.getLogger(__name__) -class LoggingCog(commands.Cog): +class Logging(ezcord.Cog): """ Comprehensive Discord logging system with improved performance and features """ @@ -1462,4 +1462,4 @@ async def on_invite_delete(self, invite: discord.Invite): self._stats['errors'] += 1 def setup(bot): - bot.add_cog(LoggingCog(bot)) \ No newline at end of file + bot.add_cog(Logging(bot)) \ No newline at end of file diff --git a/src/bot/cogs/moderation/moderation.py b/src/bot/cogs/moderation/moderation.py index 3f67077..71bdb58 100644 --- a/src/bot/cogs/moderation/moderation.py +++ b/src/bot/cogs/moderation/moderation.py @@ -25,7 +25,7 @@ # ─────────────────────────────────────────────── # >> Cogs # ─────────────────────────────────────────────── -class moderationCog(ezcord.Cog): +class moderation(ezcord.Cog): """Erweiterte Moderations-Cog mit verbesserter Sicherheit und Fehlerbehandlung""" def __init__(self, bot): @@ -555,4 +555,4 @@ async def _handle_votekick(self, member_id: int, duration_seconds: int): def setup(bot): - bot.add_cog(moderationCog(bot)) \ No newline at end of file + bot.add_cog(moderation(bot)) \ No newline at end of file diff --git a/src/bot/cogs/user/settings.py b/src/bot/cogs/user/settings.py index 5f8bdd6..80e5972 100644 --- a/src/bot/cogs/user/settings.py +++ b/src/bot/cogs/user/settings.py @@ -2,6 +2,7 @@ from discord.ext import commands from discord import SlashCommandGroup import ezcord +from discord.ui import Container from mx_handler import TranslationHandler import os @@ -109,6 +110,96 @@ async def list_languages(self, ctx: discord.ApplicationContext): response_text = f"**Available Languages:**\n{languages_list}" await ctx.respond(response_text, ephemeral=True) + @data.command( + name="get", + description="Zeigt alle Daten an, die ManagerX über dich gespeichert hat." + ) + async def get_all_data(self, ctx: discord.ApplicationContext): + """Sammelt alle User-Daten und zeigt sie in einem Container an.""" + await ctx.defer(ephemeral=True) + + user_id = ctx.author.id + guild_id = ctx.guild.id + + # 1. Datenbanken initialisieren + try: + stats_db = StatsDB() + level_db = LevelDatabase() + + # WarnDatabase needs a base path that contains 'Datenbanken/warns.db' + # Based on moderation/warn.py, it takes os.path.dirname(__file__) + # which is src/bot/cogs/moderation + warn_base_path = os.path.join("src", "bot", "cogs", "moderation") + warn_db = WarnDatabase(warn_base_path) + + notes_db = NotesDatabase("data") + except Exception as e: + await ctx.respond(f"Fehler beim Initialisieren der Datenbanken: {e}", ephemeral=True) + return + + # 2. Daten sammeln + # Language + lang = self.bot.settings_db.get_user_language(user_id) or "de" + lang_name = self.AVAILABLE_LANGUAGES.get(lang, lang) + + # Global Stats + global_info = await stats_db.get_global_user_info(user_id) + + # Server Stats + user_stats = level_db.get_user_stats(user_id, guild_id) + + # Moderation + warnings = warn_db.get_warnings(guild_id, user_id) + notes = notes_db.get_notes(guild_id, user_id) + + # 3. Container erstellen + container = Container() + container.add_text(f"# 👤 Datenauskunft für {ctx.author.name}") + container.add_separator() + + # Einstellungen + container.add_text(f"### ⚙️ Einstellungen") + container.add_text(f"**Bevorzugte Sprache:** {lang_name}") + container.add_separator() + + # Globale Daten + container.add_text("### 🌍 Globale Statistiken (Serverübergreifend)") + if global_info: + container.add_text(f"**Global Level:** {global_info['level']}") + container.add_text(f"**Gesamt XP:** {int(global_info['xp']):,}") + container.add_text(f"**Nachrichten gesamt:** {global_info['total_messages']:,}") + container.add_text(f"**Voice Zeit gesamt:** {int(global_info['total_voice_minutes'] // 60)}h {int(global_info['total_voice_minutes'] % 60)}m") + container.add_text(f"**Aktivitäts-Streak:** {global_info['daily_streak']} Tage") + else: + container.add_text("*Keine globalen Daten gefunden.*") + container.add_separator() + + # Lokale Server Daten + container.add_text(f"### 🏢 Server Statistiken ({ctx.guild.name})") + if user_stats: + xp, level, messages, xp_needed, prestige, total_earned = user_stats + container.add_text(f"**Lokales Level:** {level}") + container.add_text(f"**Aktuelle XP:** {xp:,} / {xp + xp_needed:,}") + if prestige > 0: + container.add_text(f"**Prestige Rang:** ⭐ {prestige}") + else: + container.add_text("*Keine lokalen Daten in diesem Server gefunden.*") + container.add_separator() + + # Moderationsdaten + container.add_text("### 🛡️ Moderationsdaten") + warn_count = len(warnings) if warnings else 0 + note_count = len(notes) if notes else 0 + + container.add_text(f"**Aktive Verwarnungen:** {warn_count}") + container.add_text(f"**Gespeicherte Notizen:** {note_count}") + + container.add_separator() + container.add_text("*Hinweis: ManagerX speichert nur Daten, die für die Bot-Funktionalitäten (Leveling, Moderation, Einstellungen) zwingend erforderlich sind. Du kannst deine persönlichen Daten jederzeit mit `/user data delete` löschen.*") + + view = discord.ui.DesignerView(container, timeout=0) + await ctx.respond(view=view, ephemeral=True) + @data.command( name="delete", description="Lösche alle deine Daten von ManagerX permanent." diff --git a/src/bot/core/bot_setup.py b/src/bot/core/bot_setup.py index a6caee1..6163f2f 100644 --- a/src/bot/core/bot_setup.py +++ b/src/bot/core/bot_setup.py @@ -35,7 +35,48 @@ def create_bot(self) -> ezcord.Bot: ) # Ezcord Help Command aktivieren - bot.add_help_command() + embed = discord.Embed( + title="Hello, I'm ManagerX!", # Placeholder emoji, will fall back to text if not found + description=( + "**The ultimate all-in-one Discord solution.**\n\n" + "> ManagerX simplifies server management and brings your community " + "together with engaging games and reliable tools.\n\n" + "✨ **Getting Started**\n" + "Use the menu below to explore all commands!" + ), + color=discord.Color.from_rgb(46, 204, 113), # Fresh emerald green + timestamp=discord.utils.utcnow() + ) + + embed.add_field( + name="💎 **Core Modules**", + value=( + "🛡️ **Moderation** • Advanced security tools\n" + "🏆 **Leveling** • Activity & rewards system\n" + "🎮 **Games** • Connect4, TicTacToe & more\n" + "📊 **Logging** • Real-time server insights" + ), + inline=False + ) + + embed.add_field( + name="🔗 **Important Links**", + value=( + "🌐 [**Website**](https://managerx-bot.de) • " + "🚑 [**Support**](https://discord.gg/SrcE6zJZ) • " + "💻 [**GitHub**](https://github.com/ManagerX-Development/ManagerX)" + ), + inline=False + ) + + # Check if we can set a thumbnail or image (safe fallback) + embed.set_footer(text="ManagerX • Empowering your Community", icon_url=None) + + bot.add_help_command( + embed=embed, + show_categories=False, + show_description=True + ) # Bot-Konfiguration anhängen bot.config = self._build_bot_config() diff --git a/src/bot/ui/standards.yaml b/src/bot/ui/standards.yaml index 31a9d3b..48b5baa 100644 --- a/src/bot/ui/standards.yaml +++ b/src/bot/ui/standards.yaml @@ -1,7 +1,7 @@ standards: footer: name: "A Project of ManagerX Development." - name_with_webpage: "A Project of ManagerX Development ¦ https://managerx.oppro-network.de/" + name_with_webpage: "A Project of ManagerX Development ¦ https://bot.managerx-bot.de/" authors: name: "ManagerX Development" \ No newline at end of file diff --git a/src/web/pages/Datenschutz.tsx b/src/web/pages/Datenschutz.tsx index 3d86b59..962104d 100644 --- a/src/web/pages/Datenschutz.tsx +++ b/src/web/pages/Datenschutz.tsx @@ -1,283 +1,299 @@ -import { memo } from "react"; +import { memo, useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { ArrowLeft, Shield, Mail, Lock, Database, Server, CheckCircle, Github, User, Activity, FileText } from "lucide-react"; +import { + ArrowLeft, Shield, Lock, Database, UserCheck, + Activity, Server, FileText, Mail, Bell, + Trash2, Eye, ShieldCheck, Globe, Cpu, ChevronRight, AlertTriangle +} from "lucide-react"; import { Navbar } from "../components/Navbar"; import { Footer } from "../components/Footer"; import { motion } from "framer-motion"; +const SECTIONS = [ + { id: "intro", title: "Introduction", icon: Shield }, + { id: "controller", title: "Data Controller", icon: UserCheck }, + { id: "collection", title: "Data Collection", icon: Database }, + { id: "purpose", title: "Purpose of Processing", icon: Activity }, + { id: "legal-basis", title: "Legal Basis", icon: FileText }, + { id: "storage", title: "Storage Duration", icon: Activity }, + { id: "hosting", title: "Hosting & Location", icon: Server }, + { id: "security", title: "Data Security", icon: Lock }, + { id: "rights", title: "Your Rights", icon: ShieldCheck }, + { id: "complaints", title: "Right to Complain", icon: Bell }, + { id: "decisions", title: "Automated Decisions", icon: Cpu }, + { id: "tracking", title: "Cookies & Tracking", icon: Eye }, + { id: "web-hosting", title: "Web Hosting", icon: Globe }, + { id: "deletion", title: "Data Deletion", icon: Trash2 }, + { id: "contact", title: "Contact", icon: Mail }, +]; + +const Section = ({ id, title, children }: { id: string; title: string; children: React.ReactNode }) => ( +
+
+
+

+ {title} +

+
+
+ {children} +
+
+); + export const Datenschutz = memo(function Datenschutz() { - const sections = [ - { - title: "1. Verantwortliche Stelle", - icon: User, - content: ( -
-

OPPRO.NET Network

-
-

Lenny Steiger

-

Eulauer Str. 24

-

04523 Pegau, Deutschland

-

- E-Mail:{" "} - - contact@oppro-network.de - -

-
-
- ), - }, - { - title: "2. Datenschutzbeauftragter", - icon: Shield, - content: ( -
-

Bei Datenschutzfragen kĂśnnen Sie sich an:

-

- E-Mail:{" "} - - legal@oppro-network.de - -

-
- ), - }, - { - title: "3. Erhobene Daten", - icon: Database, - content: ( -
-

Bei der Nutzung von ManagerX verarbeiten wir folgende Daten:

- -
- ), - }, - { - title: "4. Zweck der Verarbeitung", - icon: Activity, - content: ( -
-

Die Daten werden ausschließlich für folgende Zwecke verarbeitet:

- -
- ), - }, - { - title: "5. Rechtsgrundlage", - icon: FileText, - content: ( -
-

Art. 6 Abs. 1 lit. f DSGVO: Berechtigtes Interesse am Bot-Betrieb und Systemsicherheit.

-

Art. 6 Abs. 1 lit. b DSGVO: ErfĂźllung der Vertragsbestimmungen bei der Nutzung des Bots.

-

Art. 6 Abs. 1 lit. c DSGVO: Einhaltung gesetzlicher Verpflichtungen.

-
- ), - }, - { - title: "6. Speicherdauer", - icon: Activity, - content: ( -
-

Moderationsdaten: 2 Jahre ab Eintrag (zur Nachverfolgung).

-

Server-Konfigurationen: Solange der Bot aktiv ist.

-

XP/Level-Daten: Bis zur LĂśschung durch Admin oder Bot-Entfernung.

-

Log-Daten: Maximal 90 Tage fĂźr technische Fehlerdiagnose.

-
- ), - }, - { - title: "7. Hosting & Standort", - icon: Server, - content: ( -
-
-
- - Bot-Infrastruktur -
-

DeinServerHost (DSH)

-

Standort: Frankfurt am Main, Deutschland (EU)

-
-

Dies stellt sicher, dass Nutzerdaten des Bots die EU nicht verlassen.

-
- ), - }, - { - title: "8. Datensicherheit", - icon: Lock, - content: ( -
- -
- ), - }, - { - title: "9. Ihre Rechte", - icon: User, - content: ( -
-

Sie haben das Recht auf Auskunft, Berichtigung, Löschung (Vergessenwerden), Datenportabilität und Widerspruch gemäß Art. 15-22 DSGVO.

-

Anfragen an: legal@oppro-network.de

-
- ), - }, - { - title: "10. Beschwerderecht", - icon: Shield, - content: ( -

Sie haben das Recht, bei einer DatenschutzbehĂśrde (LandesdatenschutzbehĂśrde Ihres Bundeslandes) Beschwerde einzureichen.

- ), - }, - { - title: "11. Automatisierte Entscheidungen", - icon: Activity, - content: ( -

ManagerX trifft keine vollautomatisierten Entscheidungen, die erhebliche rechtliche Auswirkungen haben.

- ), - }, - { - title: "12. Cookies & Tracking", - icon: Lock, - content: ( -

Die Website nutzt keine Cookies oder Tracking-Technologien. Es werden nur technisch notwendige Session-Daten im Browser gespeichert.

- ), - }, - { - title: "13. Web-Hosting (GitHub Pages)", - icon: Github, - content: ( -
-

Anbieter: GitHub Inc., USA

-

Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO

-

IP-Adressen werden zur Abwehr von Angriffen kurzzeitig protokolliert (Standardvertragsklauseln).

-
- ), - }, - { - title: "14. Änderungen", - icon: FileText, - content: ( -

Änderungen dieser Erklärung werden auf dieser Seite veröffentlicht. Fortgesetzte Nutzung bedeutet Zustimmung.

- ), - }, - { - title: "15. Kontakt", - icon: Mail, - content: ( -
-

E-Mail: legal@oppro-network.de

-

Letzte Aktualisierung: Januar 2026

-
- ), - }, - ]; + const [activeSection, setActiveSection] = useState("intro"); + + useEffect(() => { + const handleScroll = () => { + const sectionElements = SECTIONS.map(s => document.getElementById(s.id)); + const scrollPosition = window.scrollY + 200; + + for (let i = sectionElements.length - 1; i >= 0; i--) { + const el = sectionElements[i]; + if (el && scrollPosition >= el.offsetTop) { + setActiveSection(SECTIONS[i].id); + break; + } + } + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToSection = (id: string) => { + const el = document.getElementById(id); + if (el) { + window.scrollTo({ + top: el.offsetTop - 120, + behavior: "smooth" + }); + } + }; return ( -
+
-
-
- {/* Back Link */} - - - - ZurĂźck zur Zentrale - - +
-
-
-
- -
-
-

- Datenschutz -

-
- DSGVO Standard - • - Frankfurt Hosted -
+ {/* Sidebar */} + + + {/* Content Area */} +
+
+ + + Privacy Documentation + +

+ Datenschutz +

+

+ Transparenz ist unser Kernwert. Wir erklären genau, welche Daten ManagerX erhebt, + warum wir dies tun und wie wir sie schßtzen. +

+
+ + Status: DSGVO / GDPR Standard v2.0 +
-
- {sections.map((section, index) => ( - -
-
- +
+
+

ManagerX ("wir", "Bot") nimmt den Schutz Ihrer persÜnlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerklärung.

+
+ +
+
+

OPPRO.NET Network

+
+

Lenny Steiger

+

Eulauer Str. 24

+

04523 Pegau, Deutschland

+
+

+ E-Mail:{" "} + + contact@oppro-network.de + +

+
+
+
+ +
+

Bei der Interaktion mit ManagerX verarbeiten wir nur die absolut notwendigen Daten:

+
+ {[ + { label: "Discord-IDs", desc: "Benutzer-, Server- und Channel-IDs fßr funktionale Zuweisungen." }, + { label: "Metadaten", desc: "Usernames, Rollen-Namen und Avatare fßr Embed-Darstellungen." }, + { label: "Moderationsdaten", desc: "Warnungen, Bann-Begrßndungen und Notizen zur Sicherheit." }, + { label: "Statistiken", desc: "XP-Werte, Level und Aktivitäts-Timestamps." }, + { label: "Configs", desc: "Server-spezifische Einstellungen (z.B. Willkommens-Kanäle)." } + ].map((item, i) => ( +
+
+ +
+
+
{item.label}
+

{item.desc}

+
-

- {section.title} -

+ ))} +
+
+ +
+

Die Datenverarbeitung dient ausschließlich der Kernfunktionalität von ManagerX:

+
    +
  • + + Bereitstellung von Moderations-Tools. +
  • +
  • + + Berechnung von Level-Fortschritten. +
  • +
  • + + Analyse von Fehlermeldungen zur Verbesserung. +
  • +
+
+ + - {/* Kontakt Section */} - -
- +
+

Wir speichern Daten nur so lange, wie es der Zweck erfordert:

+
+ {[ + { title: "Moderationsdaten", time: "2 Jahre", info: "Zur Nachverfolgung." }, + { title: "Log-Dateien", time: "90 Tage", info: "Automatische LÜschung." }, + { title: "Server-Daten", time: "Bis Beendigung", info: "Werden gelÜscht, wenn der Bot den Server verlässt." } + ].map((t, i) => ( +
+
+
+
+
{t.title} {t.time}
+

{t.info}

+
+ ))}
-
-

Privacy Support

-

- Fragen zur Auskunft oder LĂśschung Ihrer Daten? Unser Legal-Team steht Ihnen direkt zur VerfĂźgung. -

+
+ +
+
+ +

Frankfurt am Main

+

Unsere Server stehen in Deutschland (EU).

+
Safe EU Data Residency
- -
- - Anfrage senden - -

- Aktueller Stand: Januar 2026 • © ManagerX -

- -
+
+ +
+

Wir setzen moderne technische Schutzmaßnahmen ein wie verschlüsselte Backups und HTTPS-Kommunikation.

+
+ +
+

Sie haben das Recht auf Auskunft, Berichtigung, LĂśschung und Widerspruch.

+

Senden Sie uns eine E-Mail an legal@oppro-network.de.

+
+ +
+

Sie haben das Recht, sich bei einer AufsichtsbehĂśrde zu beschweren.

+
+ +
+

ManagerX trifft keine vollautomatisierten Entscheidungen nach Art. 22 DSGVO.

+
+ +
+

Wir verzichten vollständig auf Cookies oder Tracker.

+
+ +
+

Diese Website wird Ăźber GitHub Pages gehostet.

+
+ +
+

Verwenden Sie den Command:

+
+ /user data delete + +
+

Dies lĂśscht alle persĂśnlichen Daten permanent.

+
+ +
+
+
+ +

Privacy Support

+ + legal@oppro-network.de + +

Š 2026 ManagerX Development

+
+
+
+
diff --git a/src/web/pages/Impressum.tsx b/src/web/pages/Impressum.tsx index f247e2a..c2ae45f 100644 --- a/src/web/pages/Impressum.tsx +++ b/src/web/pages/Impressum.tsx @@ -1,235 +1,207 @@ -import { memo } from "react"; +import { memo, useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { ArrowLeft, Mail, MapPin, User, ShieldCheck } from "lucide-react"; +import { + ArrowLeft, ShieldCheck, User, MapPin, Mail, + Info, Scale, ExternalLink, Globe, ChevronRight, Gavel +} from "lucide-react"; import { Navbar } from "../components/Navbar"; import { Footer } from "../components/Footer"; import { motion } from "framer-motion"; +const SECTIONS = [ + { id: "verantwortlich", title: "Verantwortlich", icon: User }, + { id: "anschrift", title: "Anschrift", icon: MapPin }, + { id: "kontakt", title: "Kontakt", icon: Mail }, + { id: "rechtliches", title: "Rechtliche Angaben", icon: Gavel }, + { id: "haftung-inhalte", title: "Haftung fĂźr Inhalte", icon: Info }, + { id: "haftung-links", title: "Haftung fĂźr Links", icon: ExternalLink }, + { id: "urheberrecht", title: "Urheberrecht", icon: Scale }, + { id: "hosting", title: "Hosting", icon: Globe }, + { id: "streitbeilegung", title: "Streitbeilegung", icon: ShieldCheck }, +]; + +const Section = ({ id, title, children }: { id: string; title: string; children: React.ReactNode }) => ( +
+
+
+

+ {title} +

+
+
+ {children} +
+
+); + export const Impressum = memo(function Impressum() { + const [activeSection, setActiveSection] = useState("verantwortlich"); + + useEffect(() => { + const handleScroll = () => { + const sectionElements = SECTIONS.map(s => document.getElementById(s.id)); + const scrollPosition = window.scrollY + 200; + + for (let i = sectionElements.length - 1; i >= 0; i--) { + const el = sectionElements[i]; + if (el && scrollPosition >= el.offsetTop) { + setActiveSection(SECTIONS[i].id); + break; + } + } + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToSection = (id: string) => { + const el = document.getElementById(id); + if (el) { + window.scrollTo({ + top: el.offsetTop - 120, + behavior: "smooth" + }); + } + }; + return ( -
+
-
-
- {/* Back Button */} - - - - ZurĂźck zur Zentrale - - - -
-
-
- -
-
-

- Impressum -

-

- Angaben gemäß § 5 TMG -

-
+
+ + {/* Sidebar */} +
-
- {/* Kontakt Grid */} -
- -
-
- -
-

Verantwortlich

-
-
-

Lenny Steiger

-

GrĂźnder & Projektleiter

-
-
- - -
-
- -
-

Anschrift

-
-
-

Eulauer Str. 24

-

04523 Pegau

-

Deutschland

-
-
+
+ +

Gesetzlich Sicher

+

ManagerX erfüllt alle Anforderungen gemäß § 5 DDG.

+
+ - {/* Kontakt Details */} - +
+ -
-
- -
-

Kommunikation

+ + Legal Disclosure + +

+ Impressum +

+

+ Angaben gemäß § 5 DDG. ManagerX ist ein privates Open-Source-Projekt von OPPRO.NET. +

+
+ +
+
+
+

Lenny Steiger

+

GrĂźnder & Projektleiter

+
+
+ +
+
+

Eulauer Str. 24

+

04523 Pegau

+

Deutschland

-
-
-

E-Mail Adresse

- +
+ +
+
+ - -
-
-

Umsatzsteuer-Identifikationsnummer

-

Gemäß §19 UStG wird keine Umsatzsteuer berechnet (Kleinunternehmerregelung)

-
-
-

Inhaltlich Verantwortlicher

-

Lenny Steiger (Anschrift wie oben)

-
-
-

- - Direkte Kommunikation via Discord Support-Server bevorzugt. -

-
-
- +
- {/* AufsichtsbehĂśrde & Berufsbezeichnung */} - -
-
- -
-

Rechtliche Angaben

+
+
+

Gemäß §19 UStG wird keine Umsatzsteuer berechnet (Kleinunternehmerregelung).

+

Projektart: Privates Open-Source-Projekt (nicht-kommerziell).

-
-
-

Projektart

-

Privates Open-Source-Projekt (nicht-kommerziell)

-
-
-

Registrierung

-

Keine gewerbliche Anmeldung erforderlich (privates Projekt)

-
-
-

Haftungsausschluss

-

Dieses Projekt wird als kostenloser Service ohne Gewinnabsicht betrieben. Es besteht kein Anspruch auf VerfĂźgbarkeit oder Support.

-
-
- - - {/* Rechtliche Hinweise */} - -
-
-

- 01 - Haftung fĂźr Inhalte -

-

Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.

-
+
-
-

- 02 - Haftung fĂźr Links -

-

Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb kÜnnen wir fßr diese fremden Inhalte auch keine Gewähr ßbernehmen. Fßr die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich.

-
+
+

Als Diensteanbieter sind wir gemäß § 7 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG sind wir jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen.

+
-
-

- 03 - Urheberrecht -

-

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Der Source-Code ist unter der GPL-3.0 Lizenz frei verfügbar.

-
+ -
-

- 04 - Hosting -

-

Diese Website wird als statische Seite auf GitHub Pages (GitHub Inc., 88 Colin P. Kelly Jr St, San Francisco, CA 94107, USA) bereitgestellt. Die Datenschutzerklärung von GitHub finden Sie hier.

-
+
+

Die durch die Seitenbetreiber erstellten Inhalte unterliegen dem deutschen Urheberrecht. Der Source-Code ist unter der GPL-3.0 Lizenz frei auf GitHub verfĂźgbar.

+
-
- - Datenschutz - Informationen zur DSGVO - - - Bedingungen - Nutzungsrichtlinien fĂźr Bot & Web - -
+
+
+

Bereitgestellt via GitHub Pages:

+

GitHub Inc., 88 Colin P. Kelly Jr St, San Francisco, CA 94107, USA.

- - - {/* Streitbeilegung */} - -

Streitbeilegung

-

- Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: - https://ec.europa.eu/consumers/odr/ -

-

Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.

-
-
- -

- Stand: 29. Januar 2026 • © ManagerX Development -

+ + +
+

Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: https://ec.europa.eu/consumers/odr/

+

Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren teilzunehmen.

+
+ + {/* Final Contact UI */} +
+
+ +

Support

+ + contact@oppro-network.de + +

Stand: Februar 2026 • © ManagerX Development

+
+
+
diff --git a/src/web/pages/License.tsx b/src/web/pages/License.tsx index aaa5f0b..336a62e 100644 --- a/src/web/pages/License.tsx +++ b/src/web/pages/License.tsx @@ -1,297 +1,237 @@ -import { memo } from "react"; +import { memo, useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { motion } from "framer-motion"; -import { ArrowLeft, Code2, GitBranch, Heart, ExternalLink, Shield } from "lucide-react"; +import { + ArrowLeft, Code2, GitBranch, Heart, ExternalLink, + Shield, ChevronRight, Package, Terminal, Box, HelpCircle +} from "lucide-react"; import { Navbar } from "../components/Navbar"; import { Footer } from "../components/Footer"; +import { motion } from "framer-motion"; -export const License = memo(function License() { - // Python Dependencies - const pythonDependencies = [ - { name: "py-cord", version: "2.7.0", license: "MIT", url: "https://github.com/Pycord-Development/pycord" }, - { name: "ezcord", version: "0.7.4", license: "MIT", url: "https://github.com/ezcord-org/ezcord" }, - { name: "aiosqlite", version: "0.22.1", license: "MIT", url: "https://github.com/omnilib/aiosqlite" }, - { name: "aiohttp", version: "3.13.3", license: "Apache 2.0", url: "https://github.com/aio-libs/aiohttp" }, - { name: "aiocache", version: "0.12.3", license: "BSD", url: "https://github.com/aio-libs/aiocache" }, - { name: "propcache", version: "0.4.1", license: "Apache 2.0", url: "https://github.com/async-http-client/propcache" }, - { name: "requests", version: "2.32.5", license: "Apache 2.0", url: "https://github.com/psf/requests" }, - { name: "wikipedia", version: "1.4.0", license: "MIT", url: "https://github.com/goldsmith/Wikipedia" }, - { name: "beautifulsoup4", version: "4.14.3", license: "MIT", url: "https://www.crummy.com/software/BeautifulSoup/" }, - { name: "soupsieve", version: "2.8.1", license: "MIT", url: "https://github.com/facelessuser/soupsieve" }, - { name: "yarl", version: "1.22.0", license: "Apache 2.0", url: "https://github.com/aio-libs/yarl" }, - { name: "frozenlist", version: "1.8.0", license: "Apache 2.0", url: "https://github.com/aio-libs/frozenlist" }, - { name: "multidict", version: "6.7.0", license: "Apache 2.0", url: "https://github.com/aio-libs/multidict" }, - { name: "h11", version: "0.16.0", license: "MIT", url: "https://github.com/python-hyper/h11" } - ]; - - // Node.js/JavaScript Dependencies - const nodeDependencies = [ - { name: "react", version: "18+", license: "MIT", url: "https://github.com/facebook/react" }, - { name: "typescript", version: "5+", license: "Apache 2.0", url: "https://github.com/microsoft/TypeScript" }, - { name: "vite", version: "5+", license: "MIT", url: "https://github.com/vitejs/vite" }, - { name: "tailwindcss", version: "3.4+", license: "MIT", url: "https://github.com/tailwindlabs/tailwindcss" }, - { name: "@radix-ui/*", version: "latest", license: "MIT", url: "https://github.com/radix-ui/primitives" }, - { name: "framer-motion", version: "12+", license: "MIT", url: "https://github.com/framer/motion" }, - { name: "react-router-dom", version: "6+", license: "MIT", url: "https://github.com/remix-run/react-router" }, - { name: "lucide-react", version: "latest", license: "ISC", url: "https://github.com/lucide-icons/lucide" } - ]; - - // Other Dependencies (Tools & Databases) - const otherDependencies = [ - { name: "sphinx", version: "latest", license: "BSD", url: "https://github.com/sphinx-doc/sphinx" }, - { name: "SQLite", version: "3+", license: "Public Domain", url: "https://www.sqlite.org" } - ]; +const pythonDependencies = [ + { name: "py-cord", version: "2.7.0", license: "MIT", url: "https://github.com/Pycord-Development/pycord" }, + { name: "ezcord", version: "0.7.4", license: "MIT", url: "https://github.com/ezcord-org/ezcord" }, + { name: "aiosqlite", version: "0.22.1", license: "MIT", url: "https://github.com/omnilib/aiosqlite" }, + { name: "aiohttp", version: "3.13.3", license: "Apache 2.0", url: "https://github.com/aio-libs/aiohttp" }, + { name: "aiocache", version: "0.12.3", license: "BSD", url: "https://github.com/aio-libs/aiocache" }, + { name: "requests", version: "2.32.5", license: "Apache 2.0", url: "https://github.com/psf/requests" }, + { name: "wikipedia", version: "1.4.0", license: "MIT", url: "https://github.com/goldsmith/Wikipedia" }, + { name: "beautifulsoup4", version: "4.14.3", license: "MIT", url: "https://www.crummy.com/software/BeautifulSoup/" }, +]; + +const nodeDependencies = [ + { name: "react", version: "18+", license: "MIT", url: "https://github.com/facebook/react" }, + { name: "typescript", version: "5+", license: "Apache 2.0", url: "https://github.com/microsoft/TypeScript" }, + { name: "vite", version: "5+", license: "MIT", url: "https://github.com/vitejs/vite" }, + { name: "framer-motion", version: "12+", license: "MIT", url: "https://github.com/framer/motion" }, + { name: "lucide-react", version: "latest", license: "ISC", url: "https://github.com/lucide-icons/lucide" } +]; + +const SECTIONS = [ + { id: "project-license", title: "Project License", icon: Shield }, + { id: "python-deps", title: "Python Deps", icon: Box }, + { id: "node-deps", title: "Node.js Deps", icon: Package }, + { id: "other-deps", title: "Other Tools", icon: Terminal }, + { id: "contributing", title: "Contributing", icon: Heart }, + { id: "copyright", title: "Copyright", icon: HelpCircle }, +]; + +const Section = ({ id, title, children }: { id: string; title: string; children: React.ReactNode }) => ( +
+
+
+

+ {title} +

+
+
+ {children} +
+
+); + +const DependencyCard = ({ dep }: { dep: any }) => ( + +
+

{dep.name}

+ +
+
+ v{dep.version} + + {dep.license} + +
+
+); - // License Card Component - const LicenseCard = ({ dep, index }: { dep: any; index: number }) => ( - -
-
-

- {dep.name} -

-

v{dep.version}

-

- - {dep.license} - -

-
- -
-
- ); +export const License = memo(function License() { + const [activeSection, setActiveSection] = useState("project-license"); + + useEffect(() => { + const handleScroll = () => { + const sectionElements = SECTIONS.map(s => document.getElementById(s.id)); + const scrollPosition = window.scrollY + 200; + + for (let i = sectionElements.length - 1; i >= 0; i--) { + const el = sectionElements[i]; + if (el && scrollPosition >= el.offsetTop) { + setActiveSection(SECTIONS[i].id); + break; + } + } + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToSection = (id: string) => { + const el = document.getElementById(id); + if (el) { + window.scrollTo({ + top: el.offsetTop - 120, + behavior: "smooth" + }); + } + }; return ( -
+
-
-
- {/* Back Button */} - - - - ZurĂźck zur Zentrale - - +
+ + {/* Sidebar */} + + + {/* Content Area */} +
+
+ + + Developer Credits + +

+ Lizenzwesen +

+

+ Transparenz bedeutet Vertrauen. Wir nutzen Open-Source-Technologien und geben unseren Code der Community zurĂźck. +

- {/* Main Content */} - - {/* GPL-3.0 License Section */} -
-
- -

GNU General Public License v3.0

-
- -
-

- ManagerX ist lizenziert unter der{" "} - - GNU General Public License v3.0 (GPL-3.0) - +

+
+
+ +

GNU GPL v3.0

+

+ ManagerX ist unter der GNU General Public License v3.0 lizenziert. Das bedeutet:

- -
-
- ✓ -

Freiheit zu verwenden: Sie kĂśnnen das Programm fĂźr jeden Zweck verwenden.

+
+
+ 01 + Freie Nutzung und Modifikation des Codes.
-
- ✓ -

Freiheit zu studieren: Sie kĂśnnen den Quellcode einsehen und verstehen.

+
+ 02 + Modifizierte Versionen mĂźssen ebenfalls unter GPL-3.0 stehen.
-
- ✓ -

Freiheit zu verteilen: Sie kĂśnnen Kopien weitergeben.

-
-
- ✓ -

Freiheit zu verbessern: Sie kĂśnnen das Programm modifizieren und verbesserungen verĂśffentlichen.

+
+ 03 + Der Source-Code muss Üffentlich zugänglich bleiben.
- -
-

- Wichtig: Modifizierte Versionen mĂźssen auch unter GPL-3.0 verĂśffentlicht werden. Der Quellcode muss verfĂźgbar sein. -

-
+
- -
- - {/* Python Dependencies Section */} -
-
- -

Python Abhängigkeiten

-
-
- {pythonDependencies.map((dep, i) => ( - +
+
+ {pythonDependencies.map((dep) => ( + ))}
-
+
- {/* Node.js Dependencies Section */} -
-
- -

Node.js Abhängigkeiten

-
-
- {nodeDependencies.map((dep, i) => ( - +
+
+ {nodeDependencies.map((dep) => ( + ))}
-
+
- {/* Other Dependencies Section */} -
-
- -

Weitere Abhängigkeiten

-
-
- {otherDependencies.map((dep, i) => ( - - ))} +
+
+

Wir nutzen zudem SQLite 3+ (Public Domain) fĂźr die lokale Datenspeicherung und Sphinx fĂźr die Dokumentation.

-
+
- {/* Contributing Section */} -
-
- -

Mitentwicklung

-
-
-
-
- ✓ -

Bug-Reports und Verbesserungsvorschläge

-
-
- ✓ -

Code-Beiträge und Feature-Implementationen

-
-
- ✓ -

Dokumentations-Verbesserungen

-
-
- +
+
+ +

Join the Devs

+

Helfen Sie uns, ManagerX noch besser zu machen. Jede PR ist willkommen.

+ + GitHub Repository +
-
+
- {/* Copyright Section */} -
-

Copyright & Attribution

-
+ - - {/* Links Section */} -
-

Links

-
- Datenschutz - AGB - Impressum - GitHub
-
- +
+
diff --git a/src/web/pages/Nutzungsbedingungen.tsx b/src/web/pages/Nutzungsbedingungen.tsx index 8fc629a..57d7161 100644 --- a/src/web/pages/Nutzungsbedingungen.tsx +++ b/src/web/pages/Nutzungsbedingungen.tsx @@ -1,241 +1,270 @@ -import { memo } from "react"; +import { memo, useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import { ArrowLeft, FileText, Mail, Github, Shield, CheckCircle, Zap, AlertTriangle, Scale, Lock, RefreshCw, HelpCircle, Code2, LogOut, Database } from "lucide-react"; +import { + ArrowLeft, FileText, ChevronRight, Shield, Scale, Info, + CheckCircle, UserCheck, Lock, Zap, Users, MessageSquare, + Copyright, CreditCard, ExternalLink, Slash, ShieldAlert, + AlertCircle, RefreshCw, Mail, Gavel +} from "lucide-react"; import { Navbar } from "../components/Navbar"; import { Footer } from "../components/Footer"; import { motion } from "framer-motion"; +const SECTIONS = [ + { id: "overview", title: "Overview", icon: Info }, + { id: "acceptance", title: "Acceptance", icon: CheckCircle }, + { id: "eligibility", title: "Eligibility", icon: UserCheck }, + { id: "security", title: "Accounts & Security", icon: Lock }, + { id: "acceptable-use", title: "Acceptable Use", icon: Zap }, + { id: "community", title: "Community Guidelines", icon: Users }, + { id: "content-ip", title: "Content & IP", icon: Copyright }, + { id: "third-party", title: "Third-Party Services", icon: ExternalLink }, + { id: "termination", title: "Suspension & Termination", icon: Slash }, + { id: "disclaimers", title: "Disclaimers", icon: ShieldAlert }, + { id: "liability", title: "Limitation of Liability", icon: AlertCircle }, + { id: "indemnity", title: "Indemnity", icon: Shield }, + { id: "changes", title: "Changes to Terms", icon: RefreshCw }, + { id: "contact", title: "Contact", icon: Mail }, + { id: "law", title: "Governing Law", icon: Gavel }, +]; + +const Section = ({ id, title, children }: { id: string; title: string; children: React.ReactNode }) => ( +
+
+
+

+ {title} +

+
+
+ {children} +
+
+); + export const Nutzungsbedingungen = memo(function Nutzungsbedingungen() { - const legalSections = [ - { - title: "1. Geltungsbereich", - icon: Scale, - content: "Diese Nutzungsbedingungen regeln die Verwendung des Discord-Bots ManagerX sowie dieser Website. Mit der Nutzung des Bots, der Website oder des Quellcodes erklärst du dich mit diesen Bedingungen einverstanden.", - }, - { - title: "2. Lizenz & Open Source", - icon: Code2, - content: ( -
-

ManagerX wird unter der GNU GPL v3.0 lizenziert.

-
    -
  • Quellcode darf frei eingesehen, modifiziert und verbreitet werden.
  • -
  • Modifikationen mĂźssen ebenfalls unter GPL-3.0 lizenziert werden.
  • -
  • Kommerzielles Hosting ist gestattet, Quellcode muss verfĂźgbar sein.
  • -
-
- ), - }, - { - title: "3. Bot-Nutzung", - icon: Zap, - content: ( -
-

ManagerX darf auf Discord-Servern genutzt werden, sofern:

-
    -
  • • Sie Admin-Rechte auf dem Server haben
  • -
  • • Die Nutzung den Discord Terms of Service entspricht
  • -
  • • Sie keine illegalen oder schädlichen Aktivitäten durchfĂźhren
  • -
-
- ), - }, - { - title: "4. Verbotene Nutzung", - icon: AlertTriangle, - content: ( -
-

Folgende Aktivitäten sind streng untersagt:

-
    -
  • • Reverse Engineering zu bĂśswilligen Zwecken
  • -
  • • DDoS-Attacken oder Sicherheitsverstöße
  • -
  • • Automatisierte Spam-Kampagnen
  • -
  • • Verbreitung von Malware oder Exploits
  • -
-

Konsequenz: Sofortiger Ausschluss und Meldung an BehĂśrden.

-
- ), - }, - { - title: "5. Haftungsausschluss", - icon: Shield, - content: ( -
-

OPPRO.NET Network Ăźbernimmt keine Haftung fĂźr:

-
    -
  • Datenverluste
  • -
  • Ausfallzeiten
  • -
  • Indirekte Schäden
  • -
  • User-Fehler
  • -
-

Der Bot wird "AS IS" bereitgestellt.

-
- ), - }, - { - title: "6. Funktionalität", - icon: RefreshCw, - content: ( -
-

Wir behalten uns das Recht vor, Funktionen jederzeit zu aktualisieren, zu optimieren oder zu entfernen, um die Stabilität des Netzwerks zu gewährleisten.

-
- ), - }, - { - title: "7. Datenschutz", - icon: Lock, - content: ( -

Siehe unsere Datenschutzerklärung fßr Details ßber erhobene Daten und Ihre Rechte nach DSGVO.

- ), - }, - { - title: "8. Geistiges Eigentum", - icon: FileText, - content: ( -

ManagerX (Logos, Design, UI) sind Eigentum von OPPRO.NET. Der Quellcode ist unter GPL-3.0 frei verwendbar.

- ), - }, - { - title: "9. Community & Support", - icon: HelpCircle, - content: ( -
-

Support erfolgt gemeinschaftlich Ăźber GitHub Issues oder E-Mail. Ein Anspruch auf sofortigen Support besteht nicht.

-
- ), - }, - { - title: "10. Beendigung", - icon: LogOut, - content: ( -

Wir können Ihren Zugriff beenden, wenn Sie gegen diese Bedingungen verstoßen oder unsere Ressourcen missbrauchen.

- ), - }, - { - title: "11. Abhängigkeiten", - icon: Database, - content: ( -

ManagerX nutzt externe Libraries (discord.py, FastAPI, SQLite). Siehe requirements.txt fßr vollständige Details.

- ), - }, - { - title: "12. Änderungen", - icon: RefreshCw, - content: ( -

Diese Bedingungen können jederzeit geändert werden. Bedeutende Änderungen werden 30 Tage im Voraus angekündigt.

- ), - }, - { - title: "13. Geltendes Recht", - icon: Scale, - content: ( -

Diese Bedingungen unterliegen deutschem Recht. Gerichtsstand ist Deutschland.

- ), - }, - { - title: "14. Kontakt", - icon: Mail, - content: ( -
-

E-Mail: legal@oppro-network.de

-

Letzte Aktualisierung: Januar 2026

-
- ), - }, - ]; + const [activeSection, setActiveSection] = useState("overview"); + + useEffect(() => { + const handleScroll = () => { + const sectionElements = SECTIONS.map(s => document.getElementById(s.id)); + const scrollPosition = window.scrollY + 200; + + for (let i = sectionElements.length - 1; i >= 0; i--) { + const el = sectionElements[i]; + if (el && scrollPosition >= el.offsetTop) { + setActiveSection(SECTIONS[i].id); + break; + } + } + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToSection = (id: string) => { + const el = document.getElementById(id); + if (el) { + window.scrollTo({ + top: el.offsetTop - 120, + behavior: "smooth" + }); + } + }; return ( -
+
-
-
- {/* Back Button */} - - + + {/* Sidebar Container */} + + + {/* Content Area */} +
+
+ - - ZurĂźck zur Zentrale - - - -
-
-
- + + Legal Documentation + +

+ Nutzungsbedingungen +

+

+ Bitte lesen Sie diese Bedingungen sorgfältig durch, bevor Sie ManagerX nutzen. + Sie regeln die rechtliche Beziehung zwischen Ihnen und OPPRO.NET. +

+
+
+ Last Updated + February 06, 2026
-
-

- Nutzerregeln -

-
- Version 2.0.0 - • - GPL-3.0 -
+
+
+ Version + 2.2.0 (Stable)
-
- {legalSections.map((section, index) => ( - -
-
- {section.icon && } - {!section.icon && 0{index + 1}} -
-

- {section.title} -

+
+
+

ManagerX ist ein Discord-Bot, der Server-Management, Moderation, Leveling und Unterhaltungsfunktionen bereitstellt. Diese Bedingungen regeln den Zugriff auf und die Nutzung der ManagerX-Dienste, einschließlich unserer Website und API.

+

Unsere Mission ist es, Discord-Communities sicherere und engagiertere Werkzeuge zur VerfĂźgung zu stellen.

+
+ +
+

Durch das Hinzufßgen des Bots zu einem Discord-Server, die Nutzung unserer Website oder den Zugriff auf unsere API erklären Sie sich mit diesen Bedingungen einverstanden.

+
+

Wichtiger Hinweis

+

Wenn Sie diesen Bedingungen nicht in vollem Umfang zustimmen, ist Ihnen die Nutzung unserer Dienste untersagt.

+
+
+ +
+

Sie mĂźssen mindestens 13 Jahre alt sein (oder das in Ihrem Land geltende Mindestalter fĂźr die Nutzung von Discord erreicht haben), um ManagerX zu nutzen.

+

Durch die Nutzung bestätigen Sie, dass Sie ßber die rechtliche Befugnis verfßgen, diese Vereinbarung einzugehen.

+
+ +
+

Die Sicherheit Ihres Discord-Kontos und Servers liegt ausschließlich in Ihrer Verantwortung. Dies beinhaltet:

+
    +
  • + 01 + Korrekte Konfiguration der Bot-Berechtigungen auf Ihrem Server. +
  • +
  • + 02 + Schutz Ihres Discord-Accounts vor unbefugtem Zugriff. +
  • +
  • + 03 + Verantwortung fĂźr alle Aktionen, die durch falsch konfigurierte Moderations-Tools entstehen. +
  • +
+
+ +
+

ManagerX darf nicht fĂźr folgende Zwecke verwendet werden:

+
    + {[ + "Illegale Aktivitäten", + "Belästigung von Nutzern", + "Verschicken von Spam", + "Umgehung von Sicherheitsfunktionen", + "DDoS-Angriffe", + "Verbreitung von Malware", + "Automatisierte API-Abfragen", + "Reverse Engineering" + ].map((item, i) => ( +
  • + + {item} +
  • + ))} +
+
+ +
+

Wir unterstützen eine sichere Umgebung für alle. Als Anbieter behalten wir uns das Recht vor, Server von unseren Diensten auszuschließen, die gegen Community-Standards verstoßen.

+
+
+
Hassrede & Gewalt
+

Server, die Hassrede, Gewaltverherrlichung oder illegale Inhalte fĂśrdern, werden ohne Vorwarnung gesperrt.

-
- {section.content} +
+
Discord ToS
+

Alle Nutzer mĂźssen zudem die offiziellen Nutzungsbedingungen von Discord einhalten.

- - ))} - - -
-

Noch Fragen?

-

- Bei Unklarheiten kontaktiere bitte unser Support-Team oder das Development. -

-
+ +
+

Die Markenrechte an ManagerX, die Logos, das Design und die Web-UI liegen bei OPPRO.NET Network.

+

Der Quellcode des Bots ist unter der GNU GPL v3.0 lizenziert.

+
+ +
+

Unser Dienst integriert oder interagiert mit Drittanbietern wie der Discord API. Wir sind nicht verantwortlich fĂźr die Leistung oder VerfĂźgbarkeit dieser externen Dienste.

+
+ +
+

Wir behalten uns das Recht vor, den Zugriff auf ManagerX für bestimmte Nutzer, IDs oder ganze Server permanent zu beenden, wenn gegen diese Bedingungen verstoßen wird.

+
+ +
+

Wird "WIE BESEHEN" bereitgestellt.

+

Wir ßbernehmen keine Garantie fßr die ständige Verfßgbarkeit (Uptime), die absolute Richtigkeit von Statistiken oder die vollständige Fehlerfreiheit des Codes.

+
+ +
+

Soweit gesetzlich zulässig, haftet OPPRO.NET oder dessen Entwickler nicht fßr indirekte Schäden, Datenverluste oder Server-Konflikte, die durch die Nutzung des Bots entstehen.

+
+ +
+

Sie erklären sich damit einverstanden, OPPRO.NET von allen Forderungen freizustellen, die sich aus Ihrer Nutzung des Dienstes oder Ihrer Verletzung dieser Bedingungen ergeben.

+
+ +
+

Wesentliche Änderungen werden auf unserem Support-Server oder dieser Website mit einer angemessenen Vorlaufzeit angekündigt.

+
+ +
+

Bei rechtlichen Anfragen erreichen Sie uns unter:

+
+ + + legal@oppro-network.de +

ManagerX Legal Department

- -
+ + +
+

Diese Bedingungen unterliegen dem Recht der Bundesrepublik Deutschland.

+
+
diff --git a/src/web/pages/PluginsPage.tsx b/src/web/pages/PluginsPage.tsx index 5127d28..ea4b917 100644 --- a/src/web/pages/PluginsPage.tsx +++ b/src/web/pages/PluginsPage.tsx @@ -1,252 +1,261 @@ -import { memo } from "react"; +import { memo, useState, useEffect } from "react"; import { Link } from "react-router-dom"; import { ArrowLeft, Puzzle, Gamepad2, Globe, ShieldCheck, - Users, Zap, Settings2, Code2, Layers, Mail, Github + Users, Zap, Settings2, Code2, Layers, Mail, + Github, ChevronRight, CheckCircle2, Bot, Cpu, + MessagesSquare, Trophy, BellRing, UserPlus, ShieldAlert } from "lucide-react"; import { Navbar } from "../components/Navbar"; import { Footer } from "../components/Footer"; import { motion } from "framer-motion"; -const corePlugins = [ - { - title: "AI Entertainment", - features: ["4-Gewinnt (VS KI)", "TicTacToe (VS KI)"], - description: "Intelligente Minispiele direkt im Discord-Chat durch moderne KI-Integration.", - icon: Gamepad2, - gradient: "from-primary to-accent", - }, - { - title: "Global Network", - features: ["Globalchat", "Server-übergreifend"], - description: "Verbinde deine Community mit dem gesamten ManagerX-Netzwerk weltweit.", - icon: Globe, - gradient: "from-accent to-primary", - }, - { - title: "Security Core", - features: ["Antispam", "Moderation", "Warn-System", "Notes"], - description: "Vollständiger Schutz und Verwaltung für dein Team mit intelligenten Filtern.", - icon: ShieldCheck, - gradient: "from-primary via-accent to-primary", - }, - { - title: "Social & Engagement", - features: ["Levelsystem", "Welcome-Engine", "TempVC"], - description: "Steigere die Aktivität durch Belohnungen und vollautomatische Sprachkanäle.", - icon: Users, - gradient: "from-accent to-primary", - }, - { - title: "Automation", - features: ["Autodelete", "Autorole", "Loggingsystem"], - description: "Halte deinen Server sauber und organisiert – alles vollautomatisch im Hintergrund.", - icon: Zap, - gradient: "from-primary to-accent", - }, - { - title: "System Control", - features: ["Settings", "Stats"], - description: "Behalte den vollen Überblick mit detaillierten Analysen und einfacher Konfiguration.", - icon: Settings2, - gradient: "from-accent via-primary to-accent", - } +const SECTIONS = [ + { id: "ai-entertainment", title: "AI Entertainment", icon: Gamepad2 }, + { id: "global-network", title: "Global Network", icon: Globe }, + { id: "security-core", title: "Security Core", icon: ShieldCheck }, + { id: "social-engagement", title: "Social & Engagement", icon: Users }, + { id: "automation", title: "Automation", icon: Zap }, + { id: "system-control", title: "System Control", icon: Settings2 }, + { id: "developer-sdk", title: "Developer SDK", icon: Code2 }, ]; +const Section = ({ id, title, icon: Icon, children }: { id: string; title: string; icon: any; children: React.ReactNode }) => ( +
+
+
+ +
+
+

+ {title} +

+
+
+
+
+ {children} +
+
+); + +const FeatureList = ({ features }: { features: string[] }) => ( +
+ {features.map((feature, i) => ( +
+ + {feature} +
+ ))} +
+); + export const PluginsPage = memo(function PluginsPage() { + const [activeSection, setActiveSection] = useState("ai-entertainment"); + + useEffect(() => { + const handleScroll = () => { + const sectionElements = SECTIONS.map(s => document.getElementById(s.id)); + const scrollPosition = window.scrollY + 200; + + for (let i = sectionElements.length - 1; i >= 0; i--) { + const el = sectionElements[i]; + if (el && scrollPosition >= el.offsetTop) { + setActiveSection(SECTIONS[i].id); + break; + } + } + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToSection = (id: string) => { + const el = document.getElementById(id); + if (el) { + window.scrollTo({ + top: el.offsetTop - 120, + behavior: "smooth" + }); + } + }; + return ( -
+
-
-
+
- {/* Back Button */} - - - - ZurĂźck zur Zentrale - - + {/* Sidebar */} + + + {/* Content Area */} +
+
+ - ManagerX ist modular aufgebaut. Die folgenden Kern-Module sind bereits vorinstalliert und kĂśnnen Ăźber das Dashboard konfiguriert werden. - + + Features & Modules + +

+ Built-in Modules +

+

+ ManagerX ist kein einfacher Bot, sondern ein modulares Ökosystem. Entdecke die Power unserer nativen Plugins. +

- {/* Core Plugins Grid */} -
- {corePlugins.map((plugin, index) => ( - - {/* Gradient Border Effect on Hover */} -
-
+
+
+

Unsere Spiele-Engine basiert auf modernen Algorithmen, die ein forderndes Spielerlebnis direkt in Discord ermĂśglichen.

+
+
+ +

Neural Minigames

+

Die Minispiele verfĂźgen Ăźber verschiedene Schwierigkeitsstufen und ein globales Ranking-System, um den Wettbewerb zu fĂśrdern.

+ +
+
-
-
- - -
- - - Module 0{index + 1} - -
+
+

Verbinde deine Community mit tausenden anderen Servern weltweit durch unser hochperformantes Globalchat-System.

+
+
+ +

Real-time Syncing

+
+

Nachrichten werden in Millisekunden Ăźber das gesamte Netzwerk synchronisiert, inklusive Support fĂźr Embeds und Media-Vorschauen.

+ +
+
-

- {plugin.title} -

-

- {plugin.description} -

+
+

Der Security Core ist das HerzstĂźck der Moderation. Er schĂźtzt deinen Server 24/7 vor Spam, Raids und Fehlverhalten.

+
+
+ +

Advanced Protection

+
+

Ein intelligentes Warn-System trackt Verstöße serverübergreifend und ermöglicht deinem Team eine effiziente Verwaltung.

+ +
+
-
- {plugin.features.map(f => ( - - #{f.replace(/\s+/g, '_')} - - ))} -
+
+

Steigere die Aktivität auf deinem Server durch ein motivierendes Leveling-System und automatisierte Interaktionen.

+
+
+ +

Incentive Engine

- - ))} -
+

Vergib automatisch Rollen bei bestimmten Leveln und erstelle beeindruckende Willkommens-Karten fĂźr neue Mitglieder.

+ +
+ - {/* External Section */} - -
- -

External Marketplace

- COMING SOON -
+
+

Spare wertvolle Zeit durch intelligente Automatisierung von Routineaufgaben im Hintergrund.

+
+
+ +

Silent Workers

+
+

Vom automatischen Löschen unerwünschter Nachrichten bis hin zur Zuweisung von Start-Rollen – alles läuft vollautomatisch.

+ +
+
-
- - -

Developer SDK

-

- Erstelle eigene Python-Module und integriere sie nahtlos in das ManagerX Ökosystem. -

-
- - -

Community Library

-

- Teile deine Plugins mit der Community oder entdecke Module von anderen Entwicklern. -

-
-
-
+
+

Behalte die volle Kontrolle Ăźber alle Bot-Funktionen mit unserem intuitiven Konfigurations-System.

+
+
+ +

Command Center

+
+

Detaillierte Statistiken und einfache Slash-Commands ermĂśglichen eine schnelle Anpassung an die BedĂźrfnisse deines Servers.

+ +
+
- {/* Contact Footer */} - -
-

Modul-Wunsch?

-

- Kontaktiere uns fĂźr individuelle Funktions-Ideen. -

-
-
- - - - - - -
-
+
+

Bauen Sie auf der ManagerX-Architektur auf und erweitern Sie den Bot um eigene, maßgeschneiderte Funktionen.

+
+ +

Extend the Core

+

Unsere Open-Source SDK ermĂśglicht es Entwicklern, eigene Cogs zu schreiben und nahtlos zu integrieren.

+
+ + + Source Code + +
+ v2.4.0-Stable +
+
+
+
+ {/* Final Call to Action */} +
+
+
+ +

Bereit fĂźr den
nächsten Schritt?

+

Installiere ManagerX noch heute und verwandle deinen Discord-Server in ein Powerhouse.

+ + Jetzt Starten + + +

© 2026 ManagerX Development • Built for Communities

+
+
+
diff --git a/translation/messages/de.yaml b/translation/messages/de.yaml index fc883c2..da85db2 100644 --- a/translation/messages/de.yaml +++ b/translation/messages/de.yaml @@ -119,4 +119,20 @@ cog_autorole: audit_reason: "Autorole System" console_log: "✅ Autoroles [{role_names}] wurden {member_name} zugewiesen" error_forbidden: "❌ Keine Berechtigung, um Rollen zu vergeben" - error_http: "❌ Fehler beim Zuweisen der Rollen: {error}" \ No newline at end of file + error_http: "❌ Fehler beim Zuweisen der Rollen: {error}" + +####################################### +# About Cog +######################################################### + +cog_about: + messages: + title: "# ℹ️ Über ManagerX" + description: "Ein fortschrittlicher Management-Bot entwickelt für professionelle Communities.\nManagerX bietet umfangreiche Tools für Moderation, Statistiken und Server-Verwaltung." + dev_header: "## 👨💻 Entwicklung" + dev_info: "Entwickelt von **ManagerX Development**\n❯ [🌐 Website](https://managerx-bot.de)\n❯ [💬 Support Server](https://discord.gg/uDDWzsZNzD)" + stats_header: "## 📊 Statistiken" + stats_info: "❯ **Server:** `{server_count}`\n❯ **User:** `{member_count}`\n❯ **Ping:** {ping}\n❯ **Uptime:** {uptime}" + tech_header: "## 🛠️ Technik & Versionen" + tech_info: "❯ **Python:** `v{python_version}`\n❯ **PyCord:** `v{discord_version}`\n❯ **EzCord:** `v{ezcord_version}`" + footer: "{year} ManagerX Development • ManagerX v2.0.0" diff --git a/translation/messages/en.yaml b/translation/messages/en.yaml index 495906d..326288b 100644 --- a/translation/messages/en.yaml +++ b/translation/messages/en.yaml @@ -116,4 +116,20 @@ cog_autorole: audit_reason: "Autorole System" console_log: "✅ Autoroles [{role_names}] were assigned to {member_name}" error_forbidden: "❌ Missing permissions to assign roles" - error_http: "❌ Error while assigning roles: {error}" \ No newline at end of file + error_http: "❌ Error while assigning roles: {error}" + +####################################### +# About Cog +######################################################### + +cog_about: + messages: + title: "# ℹ️ About ManagerX" + description: "An advanced management bot developed for professional communities.\nManagerX offers comprehensive tools for moderation, statistics, and server management." + dev_header: "## 👨💻 Development" + dev_info: "Developed by **ManagerX Development**\n❯ [🌐 Website](https://managerx-bot.de)\n❯ [💬 Support Server](https://discord.gg/uDDWzsZNzD)" + stats_header: "## 📊 Statistics" + stats_info: "❯ **Servers:** `{server_count}`\n❯ **Users:** `{member_count}`\n❯ **Ping:** {ping}\n❯ **Uptime:** {uptime}" + tech_header: "## 🛠️ Technology & Versions" + tech_info: "❯ **Python:** `v{python_version}`\n❯ **PyCord:** `v{discord_version}`\n❯ **EzCord:** `v{ezcord_version}`" + footer: "{year} ManagerX Development • ManagerX v2.0.0"