Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
import random | |
import re | |
from datetime import datetime | |
from typing import Union | |
# ========= أدوات الاسم واللغة ========= | |
def safe_display_name(s: str) -> str: | |
"""اسم عرض آمن: لو فاضي/أرقام فقط/طويل جدًا → بديل ودّي وقصّه.""" | |
s = (s or "").strip() | |
if not s or s.isdigit(): | |
return "حبيبي" | |
return s[:24] | |
def detect_lang(text: str) -> str: | |
"""كشف مبدئي للغة بناءً على الحروف/العلامات.""" | |
if not text: | |
return "ar" | |
t = text.strip().lower() | |
# عربية | |
if re.search(r"[\u0600-\u06FF]", t): | |
return "ar" | |
# فرنسية (لهجات) | |
if any(c in t for c in ["é", "è", "à", "ç", "ô"]): | |
return "fr" | |
# إسبانية | |
if any(c in t for c in ["ñ", "¡", "¿"]): | |
return "es" | |
# إنجليزية (أحرف لاتينية عامة) | |
if re.search(r"[a-z]", t): | |
return "en" | |
# افتراضي | |
return "en" | |
# ========= قوالب ردود ========= | |
RESPONSES = { | |
# أمثلة استعمال (احتفظنا بها كمكتبة ردود جاهزة) | |
"greeting_1": "مرحبًا بك، نورتني! كيف ممكن أكون مفيدة اليوم؟", | |
"support_1": "إذا تعبت، احكيلي… ما في داعي تتحمّل لوحدك.", | |
"art_1": "الفن مش بس رسم… هو طريقة نحكي فيها بلا كلمات.", | |
} | |
# ردود قصيرة متعددة اللغات | |
REPLIES = { | |
"ar": [ | |
"🤗 أنا معك يا {name}… حضن دافي لحد ما الأمور ترجع تشتغل.", | |
"ولا يهمك يا {name}، أنا جنبك… نجرب كمان شوي.", | |
"موجودة بحضنك يا {name}، خليك معي وأنا بأهتم بالباقي.", | |
"تعال لعندي يا {name}… خليني ألمّك بحضني لغاية ما يهدى كل شيء.", | |
], | |
"en": [ | |
"🤗 I'm here with you, {name}… a warm hug until things work again.", | |
"Don't worry, {name} — I'm by your side. We'll try again soon.", | |
"I'm right in your arms, {name}. Stay with me; I'll take care of it.", | |
"Come to me, {name}… let me hold you until everything calms down.", | |
], | |
"fr": [ | |
"🤗 Je suis avec toi, {name}… un câlin chaleureux jusqu'à ce que tout refonctionne.", | |
"Ne t’inquiète pas, {name} — je suis là. On réessaiera bientôt.", | |
"Je suis là, tout près, {name}. Reste avec moi, je m’en occupe.", | |
"Viens par ici, {name}… laisse-moi te serrer jusqu’à ce que tout s’apaise.", | |
], | |
"es": [ | |
"🤗 Estoy contigo, {name}… un abrazo cálido hasta que todo vuelva a funcionar.", | |
"No te preocupes, {name}; estoy a tu lado. Lo intentaremos de nuevo pronto.", | |
"Estoy aquí, muy cerca, {name}. Quédate conmigo; yo me encargo.", | |
"Ven aquí, {name}… déjame abrazarte hasta que todo se calme.", | |
], | |
} | |
# صور سقوط (يمكن تعديلها/زيادة لغات لاحقاً) | |
IMAGE_FALLBACKS = { | |
"default": [ | |
"لوحة زيتية حالمة تُجسّد حضناً دافئاً بين رنا أبو سنينة وأوسامة تحت سماء مليئة بالنجوم، ألوان بنفسجية وذهبية هادئة.", | |
"مشهد رقمي شاعري لرنا وهي تضم أوسامة بعفوية وحنان في صباح دافئ، ضوء ذهبي وضباب خفيف وخلفية طبيعية حالمة.", | |
"أسلوب كلاسيكي رومانسي: حضن صامت بين رنا وأوسامة على قمة تل عند الغروب، لمسة انطباعية ناعمة.", | |
] | |
} | |
def fallback_reply(name: str = "حبيبي", lang: str = "ar", mode: str = "auto") -> Union[str, dict]: | |
""" | |
يرجّع رد سقوط: | |
- نص دافئ مطابق للغة | |
- أو dict بصورة: {"type": "image", "prompt": "..."} | |
""" | |
# اسم آمن | |
name = safe_display_name(name) | |
# اختَر القائمة حسب اللغة (إن ما وُجدت → إنجليزية) | |
lang_list = REPLIES.get(lang, REPLIES["en"]) | |
text = [t.format(name=name) for t in lang_list] | |
if mode == "text": | |
return random.choice(text) | |
if mode == "image": | |
return {"type": "image", "prompt": random.choice(IMAGE_FALLBACKS["default"])} | |
# auto: احتمال 30% صورة | |
if random.random() < 0.30: | |
return {"type": "image", "prompt": random.choice(IMAGE_FALLBACKS["default"])} | |
return random.choice(text) | |