diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico new file mode 100644 index 0000000..950a896 Binary files /dev/null and b/docs/source/_static/favicon.ico differ diff --git a/docs/source/conf.py b/docs/source/conf.py index c1b17ee..17654c1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -58,6 +58,7 @@ html_css_files = [ 'custom.css', ] +html_favicon = '_static/favicon.ico' html_theme_options = { "icon_links": [ { @@ -65,6 +66,18 @@ "url": "https://github.com/ManagerX-Development/ManagerX", "icon": "fa-brands fa-square-github", "type": "fontawesome", + }, + { + "name": "Website", + "url": "https://managerx-bot.de", + "icon": "fa-solid fa-globe", + "type": "fontawesome", + }, + { + "name": "Instagram", + "url": "https://www.instagram.com/managerx_development", + "icon": "fa-brands fa-instagram", + "type": "fontawesome", } ], diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..950a896 Binary files /dev/null and b/favicon.ico differ diff --git a/src/api/dashboard/routes.py b/src/api/dashboard/routes.py index 074c2b9..2742885 100644 --- a/src/api/dashboard/routes.py +++ b/src/api/dashboard/routes.py @@ -333,6 +333,31 @@ def calc_trend(today, yesterday): m_trend, m_trend_val = calc_trend(messages_today, messages_yesterday) j_trend, j_trend_val = calc_trend(joined_today, joined_yesterday) + # Calculate Server Age (NEU) + server_age_days = (today_dt - guild.created_at).days + server_age_str = f"{server_age_days}d" + + # Fetch Staff / User Role members (NEU) + staff_members_list = [] + user_members_list = [] + + if hasattr(bot_instance, 'settings_db') and hasattr(bot_instance.settings_db, 'get_guild_settings'): + guild_settings = bot_instance.settings_db.get_guild_settings(guild_id) + team_role_id = guild_settings.get("team_role_id") + user_role_id = guild_settings.get("user_role_id") + + if team_role_id: + team_role = guild.get_role(int(team_role_id)) + if team_role: + for m in team_role.members: + staff_members_list.append({"name": m.display_name, "id": str(m.id), "avatar": m.display_avatar.url}) + + if user_role_id: + user_role = guild.get_role(int(user_role_id)) + if user_role: + for m in user_role.members: + user_members_list.append({"name": m.display_name, "id": str(m.id), "avatar": m.display_avatar.url}) + # Prepare final stats object total_members = guild.member_count or len(guild.members) online_members = 0 @@ -350,7 +375,10 @@ def calc_trend(today, yesterday): "messages_today": messages_today, "messages_trend": m_trend, "messages_trend_value": m_trend_val, - "history": history + "history": history, + "server_age": server_age_str, + "staff_members": staff_members_list, + "user_members": user_members_list } return stats except Exception as e: diff --git a/src/api/dashboard/settings_routes.py b/src/api/dashboard/settings_routes.py index c7a086c..c89a02c 100644 --- a/src/api/dashboard/settings_routes.py +++ b/src/api/dashboard/settings_routes.py @@ -54,7 +54,8 @@ async def get_settings(guild_id: int): raise HTTPException(status_code=503, detail="Bot database not ready") try: - guild_lang = bot_instance.settings_db.get_guild_language(guild_id) if hasattr(bot_instance.settings_db, 'get_guild_language') else "de" + guild_settings = bot_instance.settings_db.get_guild_settings(guild_id) if hasattr(bot_instance.settings_db, 'get_guild_settings') else {} + guild_lang = guild_settings.get("language", "de") return { "success": True, @@ -63,7 +64,9 @@ async def get_settings(guild_id: int): "prefix": "!" , "auto_mod": True, "welcome_message": False, - "language": guild_lang + "language": guild_lang, + "user_role_id": str(guild_settings.get("user_role_id")) if guild_settings.get("user_role_id") else None, + "team_role_id": str(guild_settings.get("team_role_id")) if guild_settings.get("team_role_id") else None } } except Exception as e: @@ -80,7 +83,18 @@ async def update_settings(guild_id: int, request: Request, user: dict = Depends( data = await request.json() try: - # Update logic... + # Update logic + update_data = {} + if "language" in data: + update_data["language"] = data["language"] + if "user_role_id" in data: + update_data["user_role_id"] = int(data["user_role_id"]) if data["user_role_id"] else None + if "team_role_id" in data: + update_data["team_role_id"] = int(data["team_role_id"]) if data["team_role_id"] else None + + if update_data and hasattr(bot_instance.settings_db, 'update_guild_settings'): + bot_instance.settings_db.update_guild_settings(guild_id, **update_data) + user_name = user.get("username", "Unbekannter User") await send_dashboard_notification(guild_id, "Allgemein", user_name) return {"success": True, "message": "Settings updated"} diff --git a/src/web/components/OverviewSettings.tsx b/src/web/components/OverviewSettings.tsx index 43aa50f..b9094bb 100644 --- a/src/web/components/OverviewSettings.tsx +++ b/src/web/components/OverviewSettings.tsx @@ -146,11 +146,40 @@ export default function OverviewSettings({ guildId, initialStats, settings }: Ov
Nachrichten Volumen (7 Tage)
-Keine Rollen definiert oder keine Mitglieder gefunden.
+ )} +Mitglieder mit dieser Rolle werden als Staff im Dashboard angezeigt.
+Benutzer mit dieser Rolle werden im User-Quick-View angezeigt.
+