feat: Añadir sistema de mensajes de bienvenida con traducción para Discord
- Nueva tabla 'welcome_messages' en la base de datos - Panel web con página de configuración de bienvenida (/welcome) - Listar, crear, editar y eliminar mensajes por servidor - Vista previa del mensaje - Plantillas predefinidas - Bot Discord: - Nuevo intent 'members' para detectar nuevos usuarios - Evento on_member_join que envía mensaje de bienvenida - Botones de traducción en mensajes de bienvenida - Actualizada configuración de MySQL en docker-compose.yml - Añadido logging de debug para traducciones
This commit is contained in:
@@ -128,6 +128,7 @@ async def login(request: Request):
|
||||
if verify_admin(username, password):
|
||||
response = RedirectResponse(url="/dashboard", status_code=status.HTTP_303_SEE_OTHER)
|
||||
response.set_cookie(key="auth", value="ok", httponly=True)
|
||||
response.set_cookie(key="username", value=username, httponly=True)
|
||||
return response
|
||||
|
||||
return templates.TemplateResponse("login.html", {
|
||||
@@ -140,10 +141,12 @@ async def dashboard(request: Request):
|
||||
if request.cookies.get("auth") != "ok":
|
||||
return RedirectResponse(url="/login")
|
||||
|
||||
username = request.cookies.get("username", "")
|
||||
config = get_config()
|
||||
return templates.TemplateResponse("dashboard.html", {
|
||||
"request": request,
|
||||
"config": config
|
||||
"config": config,
|
||||
"username": username
|
||||
})
|
||||
|
||||
@app.get("/config")
|
||||
@@ -151,10 +154,12 @@ async def config_page(request: Request):
|
||||
if request.cookies.get("auth") != "ok":
|
||||
return RedirectResponse(url="/login")
|
||||
|
||||
username = request.cookies.get("username", "")
|
||||
config = get_config()
|
||||
return templates.TemplateResponse("config.html", {
|
||||
"request": request,
|
||||
"config": config
|
||||
"config": config,
|
||||
"username": username
|
||||
})
|
||||
|
||||
@app.get("/languages")
|
||||
@@ -248,6 +253,7 @@ async def update_language_flags(request: Request):
|
||||
async def logout():
|
||||
response = RedirectResponse(url="/login", status_code=status.HTTP_303_SEE_OTHER)
|
||||
response.delete_cookie("auth")
|
||||
response.delete_cookie("username")
|
||||
return response
|
||||
|
||||
@app.get("/admins")
|
||||
@@ -316,6 +322,81 @@ async def update_admin_post(request: Request):
|
||||
|
||||
return RedirectResponse(url="/admins?success=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
@app.get("/welcome")
|
||||
async def welcome_page(request: Request):
|
||||
if request.cookies.get("auth") != "ok":
|
||||
return RedirectResponse(url="/login")
|
||||
|
||||
from botdiscord.database import get_all_welcome_configs
|
||||
|
||||
configs = get_all_welcome_configs()
|
||||
config_dict = {c['guild_id']: c for c in configs} if configs else {}
|
||||
|
||||
selected_guild = request.query_params.get("guild")
|
||||
selected_cfg = None
|
||||
if selected_guild and selected_guild.isdigit():
|
||||
selected_cfg = config_dict.get(int(selected_guild))
|
||||
|
||||
success = request.query_params.get("success") == "1"
|
||||
error = request.query_params.get("error") == "1"
|
||||
|
||||
return templates.TemplateResponse("welcome.html", {
|
||||
"request": request,
|
||||
"configs": config_dict,
|
||||
"config": config_dict,
|
||||
"selected_guild": int(selected_guild) if selected_guild and selected_guild.isdigit() else None,
|
||||
"selected_cfg": selected_cfg,
|
||||
"success": success,
|
||||
"error": error,
|
||||
"new_form": request.query_params.get("new") == "1"
|
||||
})
|
||||
|
||||
@app.post("/welcome/save")
|
||||
async def save_welcome(request: Request):
|
||||
if request.cookies.get("auth") != "ok":
|
||||
raise HTTPException(status_code=401)
|
||||
|
||||
form = await request.form()
|
||||
guild_id = form.get("guild_id")
|
||||
channel_id = form.get("channel_id")
|
||||
message_content = form.get("message_content")
|
||||
enabled = form.get("enabled") == "1"
|
||||
|
||||
if not guild_id or not channel_id or not message_content:
|
||||
return RedirectResponse(url="/welcome?error=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
try:
|
||||
from botdiscord.database import save_welcome_message
|
||||
save_welcome_message(
|
||||
int(guild_id),
|
||||
int(channel_id),
|
||||
message_content,
|
||||
enabled
|
||||
)
|
||||
return RedirectResponse(url="/welcome?success=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
except Exception as e:
|
||||
print(f"Error saving welcome message: {e}")
|
||||
return RedirectResponse(url="/welcome?error=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
@app.post("/welcome/delete")
|
||||
async def delete_welcome(request: Request):
|
||||
if request.cookies.get("auth") != "ok":
|
||||
raise HTTPException(status_code=401)
|
||||
|
||||
form = await request.form()
|
||||
guild_id = form.get("guild_id")
|
||||
|
||||
if guild_id:
|
||||
try:
|
||||
from botdiscord.database import delete_welcome_message
|
||||
delete_welcome_message(int(guild_id))
|
||||
return RedirectResponse(url="/welcome?success=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
except Exception as e:
|
||||
print(f"Error deleting welcome message: {e}")
|
||||
return RedirectResponse(url="/welcome?error=1", status_code=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
return RedirectResponse(url="/welcome", status_code=status.HTTP_303_SEE_OTHER)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
web_config = get_web_config()
|
||||
|
||||
Reference in New Issue
Block a user