Userbot / flet_ui.py
mrwabnalas40's picture
Upload 105 files
40d06ea verified
import flet as ft
import logging
from config import config, get_config
class NoraAIChatUI:
def __init__(self):
self.page = None
self.chat_history = ft.ListView(expand=True, spacing=10, padding=20)
self.message_input = ft.TextField(
label="اكتب رسالتك هنا...",
multiline=True,
min_lines=1,
max_lines=3,
expand=True
)
self.system_info = ft.Text("", size=12, color=ft.colors.GREY_600)
def build_ui(self):
"""بناء واجهة المستخدم"""
return ft.Container(
content=ft.Column([
# الهيدر
ft.Container(
content=ft.Column([
ft.Text(
"🌟 نورا - المساعد الذكي المتطور",
size=24,
weight=ft.FontWeight.BOLD,
color=ft.colors.BLUE_900
),
self.system_info,
]),
padding=20,
bgcolor=ft.colors.BLUE_50,
border_radius=10,
margin=10
),
# سجل المحادثة
ft.Container(
content=self.chat_history,
expand=True,
border=ft.border.all(1, ft.colors.GREY_300),
border_radius=10,
margin=10,
padding=10
),
# منطقة الإدخال
ft.Container(
content=ft.Row([
self.message_input,
ft.IconButton(
icon=ft.Icons.SEND,
icon_color=ft.colors.WHITE,
bgcolor=ft.colors.BLUE_500,
on_click=self.send_message
)
]),
padding=20,
bgcolor=ft.colors.GREY_50
),
# لوحة التحكم
self.build_control_panel()
]),
expand=True
)
def build_control_panel(self):
"""بناء لوحة التحكم"""
return ft.Container(
content=ft.Row([
ft.TextButton("🔄 تحديث النظام", on_click=self.refresh_system),
ft.TextButton("💾 حفظ المحادثة", on_click=self.save_chat),
ft.TextButton("⚙️ الإعدادات", on_click=self.show_settings),
], alignment=ft.MainAxisAlignment.CENTER),
padding=10,
margin=10
)
def add_message(self, sender: str, message: str, is_user: bool = True):
"""إضافة رسالة إلى سجل المحادثة"""
message_color = ft.colors.BLUE_700 if is_user else ft.colors.GREEN_700
alignment = ft.MainAxisAlignment.END if is_user else ft.MainAxisAlignment.START
icon = "👤" if is_user else "🤖"
message_widget = ft.Container(
content=ft.Row([
ft.Text(icon, size=16),
ft.Container(
content=ft.Text(message, color=ft.colors.WHITE),
padding=15,
border_radius=15,
bgcolor=message_color,
expand=True
)
], alignment=alignment),
margin=5
)
self.chat_history.controls.append(message_widget)
self.chat_history.scroll_to(offset=-1, duration=300)
async def send_message(self, e):
"""إرسال رسالة"""
message = self.message_input.value.strip()
if not message:
return
# إضافة رسالة المستخدم
self.add_message("أنت", message, is_user=True)
self.message_input.value = ""
# محاكاة رد نورا (سيتم استبدالها بالاتصال بالنظام الفعلي)
await self.simulate_nora_response(message)
async def simulate_nora_response(self, user_message: str):
"""محاكاة رد نورا (ستستبدل بالاتصال بالنظام الفعلي)"""
# إضافة رسالة محاكاة
self.add_message("نورا", "🤔 أفكر في رد مناسب...", is_user=False)
# محاكاة وقت المعالجة
import asyncio
await asyncio.sleep(1)
# ردود محاكاة
responses = [
"أهلاً بك! كيف يمكنني مساعدتك اليوم؟ 🌸",
"هذا سؤال مثير للاهتمام! دعني أفكر فيه... 💭",
"شكراً لمشاركتي هذا! لدي بعض الأفكار حول الموضوع. ✨",
"أفهم ما تقصد. هل تريد أن أشرح أكثر؟ 🌟"
]
import random
response = random.choice(responses)
# تحديث الرد النهائي
self.chat_history.controls.pop() # إزالة رسالة "أفكر"
self.add_message("نورا", response, is_user=False)
async def refresh_system(self, e):
"""تحديث معلومات النظام"""
cfg = get_config()
system_status = f"النموذج: {cfg['preferred_models'][0]} | الذاكرة: {'مفعل' if cfg['enable_memory'] else 'معطل'}"
self.system_info.value = system_status
await self.page.update_async()
async def save_chat(self, e):
"""حفظ المحادثة"""
self.add_message("النظام", "💾 تم حفظ المحادثة بنجاح!", is_user=False)
async def show_settings(self, e):
"""عرض إعدادات النظام"""
# سيتم تطوير هذه الوظيفة لاحقاً
self.add_message("النظام", "⚙️ شاشة الإعدادات قيد التطوير...", is_user=False)
def start_flet(port=5000):
"""بدء واجهة Flet"""
async def main(page: ft.Page):
# إعدادات الصفحة
page.title = "نورا - المساعد الذكي المتطور"
page.theme_mode = ft.ThemeMode.LIGHT
page.padding = 0
page.fonts = {
"Arabic": "https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap"
}
page.theme = ft.Theme(font_family="Arabic")
# تهيئة الواجهة
ui = NoraAIChatUI()
ui.page = page
# إضافة الواجهة إلى الصفحة
page.add(ui.build_ui())
# تحديث معلومات النظام
await ui.refresh_system(None)
# رسالة ترحيبية
ui.add_message("نورا", "أهلاً وسهلاً! أنا نورا، مساعدتك الذكية. كيف يمكنني مساعدتك اليوم؟ 🌟", is_user=False)
# تشغيل التطبيق
try:
ft.app(
target=main,
port=port,
view=ft.WEB_BROWSER,
assets_dir="assets"
)
except Exception as e:
logging.error(f"خطأ في تشغيل واجهة Flet: {e}")
print(f"❌ فشل تشغيل الواجهة على المنفذ {port}")
print(f"🔧 الخطأ: {e}")