Really-amin commited on
Commit
5dd3a3f
1 Parent(s): 04034d0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +225 -219
app.py CHANGED
@@ -1,236 +1,242 @@
1
  import streamlit as st
2
  import time
3
  import random
4
- import os
5
 
6
- # تنظیمات اصلی چت‌بات
7
- ADMIN_USERNAME = "admin"
8
- ADMIN_PASSWORD = "password"
9
-
10
- # CSS سفارشی برای ظاهر چت‌بات و حالت تیره و روشن
11
- CUSTOM_CSS = """
12
  <style>
13
- :root {
14
- --primary-color: #4a90e2;
15
- --secondary-color: #ff6b6b;
16
- --neutral-color: #f5f5f5;
17
- --accent-color: #50e3c2;
18
- --background-light: #e8effa;
19
- --background-dark: #1c1c1e;
20
- --text-color-light: #333;
21
- --text-color-dark: #e0e0e0;
22
- --shadow-color: rgba(0, 0, 0, 0.1);
23
- }
24
-
25
- body {
26
- font-family: 'Vazir', sans-serif;
27
- background: var(--background-color);
28
- }
29
-
30
- .chat-container {
31
- max-width: 400px;
32
- margin: 0 auto;
33
- border-radius: 15px;
34
- box-shadow: 0px 4px 12px var(--shadow-color);
35
- overflow: hidden;
36
- background: var(--background-color);
37
- }
38
-
39
- .header {
40
- background: linear-gradient(135deg, var(--primary-color), var(--accent-color));
41
- color: white;
42
- padding: 10px;
43
- text-align: center;
44
- font-weight: bold;
45
- font-size: 18px;
46
- }
47
-
48
- .chat-body {
49
- background: var(--neutral-color);
50
- padding: 15px;
51
- height: 300px;
52
- overflow-y: auto;
53
- display: flex;
54
- flex-direction: column;
55
- }
56
-
57
- .message {
58
- padding: 12px 15px;
59
- margin: 10px 0;
60
- border-radius: 15px;
61
- width: fit-content;
62
- max-width: 80%;
63
- font-size: 15px;
64
- box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.05);
65
- transition: all 0.3s ease;
66
- }
67
-
68
- .message.user {
69
- align-self: flex-end;
70
- background: var(--primary-color);
71
- color: var(--text-color-light);
72
- }
73
-
74
- .message.bot {
75
- align-self: flex-start;
76
- background: var(--secondary-color);
77
- color: white;
78
- }
79
-
80
- .footer {
81
- display: flex;
82
- padding: 10px;
83
- background: var(--neutral-color);
84
- border-top: 1px solid #ddd;
85
- align-items: center;
86
- }
87
-
88
- .footer input[type="text"] {
89
- flex: 1;
90
- padding: 10px;
91
- border: none;
92
- border-radius: 20px;
93
- background: #ffffff;
94
- margin-right: 10px;
95
- font-size: 14px;
96
- box-shadow: inset 3px 3px 8px rgba(0, 0, 0, 0.1);
97
- }
98
-
99
- .footer .icon, .footer .send-btn {
100
- font-size: 20px;
101
- color: var(--primary-color);
102
- cursor: pointer;
103
- transition: color 0.3s ease, transform 0.2s ease;
104
- }
105
-
106
- .footer .icon:hover, .footer .send-btn:hover {
107
- color: var(--secondary-color);
108
- transform: scale(1.1);
109
- }
110
-
111
- .admin-icon {
112
- font-size: 40px;
113
- color: var(--primary-color);
114
- cursor: pointer;
115
- text-align: center;
116
- margin-top: 10px;
117
- transition: color 0.3s ease;
118
- }
119
-
120
- .admin-icon:hover {
121
- color: var(--secondary-color);
122
- transform: scale(1.1);
123
- }
124
-
125
- h1, h2 {
126
- font-size: 20px;
127
- color: var(--primary-color);
128
- text-align: center;
129
- margin-top: 15px;
130
- font-weight: bold;
131
- }
 
 
 
 
 
 
 
132
  </style>
133
  """
134
 
135
- # اعمال CSS سفارشی
136
- st.markdown(CUSTOM_CSS, unsafe_allow_html=True)
137
-
138
  class ModernChatbot:
139
  def __init__(self):
140
- self.conversation_history = []
141
- self.admin_logged_in = False
142
-
 
 
143
  def chat_response(self, message):
144
- """دریافت پیام کاربر و اضافه کردن پاسخ به تاریخچه گفتگو"""
145
- time.sleep(0.5)
146
- self.conversation_history.append(("شما", message))
147
-
148
  responses = [
149
- "این یک پاسخ نمونه از ربات است.",
150
- "چه کمکی از من بر می‌آید؟",
151
- "لطفاً بیشتر توضیح دهید.",
152
- "متشکرم از پیامتان!"
153
  ]
154
- bot_message = random.choice(responses)
155
- self.conversation_history.append(("ربات", bot_message))
156
 
157
- return self.conversation_history
158
-
159
- def login_admin(self, username, password):
160
- if username == ADMIN_USERNAME and password == ADMIN_PASSWORD:
161
- self.admin_logged_in = True
162
- return True
163
- else:
164
- return False
 
 
165
 
166
  def clear_history(self):
167
- self.conversation_history = []
168
-
169
- # ایجاد چت‌بات
170
- chatbot = ModernChatbot()
171
-
172
- # حالت روشن یا تیره
173
- dark_mode = st.sidebar.checkbox("فعال کردن حالت تیره")
174
-
175
- # تغییر تم بر اساس حالت انتخاب شده
176
- background_color = "--background-dark" if dark_mode else "--background-light"
177
- text_color = "--text-color-dark" if dark_mode else "--text-color-light"
178
- st.markdown(f"<style>:root {{ --background-color: var({background_color}); --text-color: var({text_color}); }}</style>", unsafe_allow_html=True)
179
-
180
- # آیکون ورود ادمین و نمایش پاپ‌آپ
181
- st.markdown("<div class='admin-icon'>&#128100;</div>", unsafe_allow_html=True)
182
-
183
- if "show_popup" not in st.session_state:
184
- st.session_state["show_popup"] = False
185
-
186
- if "admin_logged_in" not in st.session_state:
187
- st.session_state["admin_logged_in"] = False
188
-
189
- if st.session_state["show_popup"]:
190
- with st.container():
191
- st.markdown("<div class='popup-form'><h2 style='color: var(--primary-color); text-align:center;'>ورود ادمین</h2>", unsafe_allow_html=True)
192
- username = st.text_input("نام کاربری")
193
- password = st.text_input("رمز عبور", type="password")
194
- if st.button("ورود"):
195
- if chatbot.login_admin(username, password):
196
- st.session_state["admin_logged_in"] = True
197
- st.session_state["show_popup"] = False
198
- st.success("ورود موفقیت‌آمیز بود!")
 
 
 
 
 
 
 
199
  st.experimental_rerun()
200
- else:
201
- st.error("نام کاربری یا رمز عبور اشتباه است")
202
- else:
203
- if st.button("ورود به ادمین"):
204
- st.session_state["show_popup"] = True
205
-
206
- if st.session_state["admin_logged_in"]:
207
- st.subheader("داشبورد مدیر")
208
- if st.button("🗑️ حذف تاریخچه گفتگو"):
209
- chatbot.clear_history()
210
- st.success("تاریخچه گفتگو حذف شد.")
211
- st.experimental_rerun()
212
-
213
- # لینک به فایل داشبورد
214
- if os.path.exists("admin_dashboard.py"):
215
- st.markdown("[ورود به داشبورد](./admin_dashboard.py)", unsafe_allow_html=True)
216
-
217
- # نمایش چت‌باکس
218
- st.markdown("<div class='chat-container'><div class='header'>Chat with us</div><div class='chat-body'>", unsafe_allow_html=True)
219
-
220
- # نمایش تاریخچه گفتگو
221
- for sender, message in chatbot.conversation_history:
222
- align_class = "user" if sender == "شما" else "bot"
223
- st.markdown(f"<div class='message {align_class}'><strong>{sender}:</strong> {message}</div>", unsafe_allow_html=True)
224
-
225
- st.markdown("</div><div class='footer'><input type='text' placeholder='Type a message...' id='user_message'/><span class='icon'>📎</span><span class='send-btn'>🚀</span></div></div>", unsafe_allow_html=True)
226
-
227
- user_message = st.text_input("پیام خود را اینجا بنویسید...", key="user_message", label_visibility="collapsed")
228
-
229
- if st.button("ارسال"):
230
- if user_message:
231
- chatbot.chat_response(user_message)
232
- st.experimental_rerun()
233
-
234
- if st.button("پاک کردن گفتگو") and not chatbot.admin_logged_in:
235
- chatbot.clear_history()
236
- st.experimental_rerun()
 
1
  import streamlit as st
2
  import time
3
  import random
 
4
 
5
+ # تنظیمات استایل مدرن با گلس مورفیسم و نئومورفیسم
6
+ MODERN_CSS = """
 
 
 
 
7
  <style>
8
+ @import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;700&display=swap');
9
+
10
+ :root {
11
+ --primary-color: rgba(74, 144, 226, 0.9);
12
+ --secondary-color: rgba(255, 107, 107, 0.9);
13
+ --bg-color: rgba(240, 242, 245, 1);
14
+ --glass-bg: rgba(255, 255, 255, 0.25);
15
+ --glass-border: rgba(255, 255, 255, 0.18);
16
+ --shadow-color: rgba(31, 38, 135, 0.37);
17
+ --text-color: #333;
18
+ }
19
+
20
+ .stApp {
21
+ background: linear-gradient(45deg, #e6e9f0 0%, #eef1f5 100%);
22
+ font-family: 'Vazirmatn', sans-serif;
23
+ }
24
+
25
+ .chat-container {
26
+ background: var(--glass-bg);
27
+ backdrop-filter: blur(4px);
28
+ -webkit-backdrop-filter: blur(4px);
29
+ border-radius: 20px;
30
+ border: 1px solid var(--glass-border);
31
+ box-shadow: 0 8px 32px 0 var(--shadow-color);
32
+ padding: 20px;
33
+ margin: 20px 0;
34
+ }
35
+
36
+ .message {
37
+ display: flex;
38
+ margin: 15px 0;
39
+ animation: fadeIn 0.5s ease-out;
40
+ }
41
+
42
+ .message-content {
43
+ padding: 15px 20px;
44
+ border-radius: 15px;
45
+ max-width: 80%;
46
+ box-shadow:
47
+ 8px 8px 16px rgba(174, 174, 192, 0.4),
48
+ -8px -8px 16px rgba(255, 255, 255, 0.65);
49
+ }
50
+
51
+ .user-message {
52
+ justify-content: flex-end;
53
+ }
54
+
55
+ .user-message .message-content {
56
+ background: var(--primary-color);
57
+ color: white;
58
+ margin-left: auto;
59
+ border-bottom-right-radius: 5px;
60
+ }
61
+
62
+ .bot-message {
63
+ justify-content: flex-start;
64
+ }
65
+
66
+ .bot-message .message-content {
67
+ background: var(--glass-bg);
68
+ border: 1px solid var(--glass-border);
69
+ color: var(--text-color);
70
+ border-bottom-left-radius: 5px;
71
+ }
72
+
73
+ .input-container {
74
+ background: var(--glass-bg);
75
+ backdrop-filter: blur(4px);
76
+ border-radius: 15px;
77
+ border: 1px solid var(--glass-border);
78
+ padding: 10px;
79
+ margin-top: 20px;
80
+ display: flex;
81
+ align-items: center;
82
+ }
83
+
84
+ .stTextInput input {
85
+ background: rgba(255, 255, 255, 0.1) !important;
86
+ border: none !important;
87
+ padding: 10px 15px !important;
88
+ border-radius: 10px !important;
89
+ color: var(--text-color) !important;
90
+ backdrop-filter: blur(4px) !important;
91
+ direction: rtl;
92
+ }
93
+
94
+ .stButton > button {
95
+ background: linear-gradient(45deg, var(--primary-color), var(--secondary-color)) !important;
96
+ color: white !important;
97
+ border: none !important;
98
+ border-radius: 10px !important;
99
+ padding: 10px 25px !important;
100
+ font-family: 'Vazirmatn', sans-serif !important;
101
+ transition: transform 0.3s ease, box-shadow 0.3s ease !important;
102
+ box-shadow:
103
+ 4px 4px 8px rgba(174, 174, 192, 0.4),
104
+ -4px -4px 8px rgba(255, 255, 255, 0.65) !important;
105
+ }
106
+
107
+ .stButton > button:hover {
108
+ transform: translateY(-2px);
109
+ box-shadow:
110
+ 6px 6px 12px rgba(174, 174, 192, 0.4),
111
+ -6px -6px 12px rgba(255, 255, 255, 0.65) !important;
112
+ }
113
+
114
+ @keyframes fadeIn {
115
+ from { opacity: 0; transform: translateY(10px); }
116
+ to { opacity: 1; transform: translateY(0); }
117
+ }
118
+
119
+ /* Admin Panel Styling */
120
+ .admin-panel {
121
+ background: var(--glass-bg);
122
+ backdrop-filter: blur(4px);
123
+ border-radius: 15px;
124
+ border: 1px solid var(--glass-border);
125
+ padding: 20px;
126
+ margin: 20px 0;
127
+ }
128
+
129
+ .admin-panel h3 {
130
+ color: var(--primary-color);
131
+ font-weight: 500;
132
+ margin-bottom: 15px;
133
+ }
134
  </style>
135
  """
136
 
 
 
 
137
  class ModernChatbot:
138
  def __init__(self):
139
+ if 'messages' not in st.session_state:
140
+ st.session_state.messages = []
141
+ if 'admin_logged_in' not in st.session_state:
142
+ st.session_state.admin_logged_in = False
143
+
144
  def chat_response(self, message):
145
+ if not message.strip():
146
+ return
147
+
 
148
  responses = [
149
+ "چطور می‌تونم کمکتون کنم؟",
150
+ "متوجه شدم. لطفاً بیشتر توضیح بدید.",
151
+ "بله، کاملاً درسته. می‌تونم راهنماییتون کنم.",
152
+ "این موضوع جالبیه. نظر شما چیه؟"
153
  ]
 
 
154
 
155
+ st.session_state.messages.append({"role": "user", "content": message})
156
+
157
+ # شبیه‌سازی تایپ کردن ربات
158
+ with st.empty():
159
+ for i in range(3):
160
+ time.sleep(0.3)
161
+ st.write("..." + "." * i)
162
+
163
+ bot_response = random.choice(responses)
164
+ st.session_state.messages.append({"role": "assistant", "content": bot_response})
165
 
166
  def clear_history(self):
167
+ st.session_state.messages = []
168
+
169
+ def main():
170
+ st.set_page_config(
171
+ page_title="چت‌بات هوشمند",
172
+ page_icon="🤖",
173
+ layout="centered",
174
+ initial_sidebar_state="expanded"
175
+ )
176
+
177
+ # اعمال CSS سفارشی
178
+ st.markdown(MODERN_CSS, unsafe_allow_html=True)
179
+
180
+ # پنل مدیریت در سایدبار
181
+ with st.sidebar:
182
+ st.markdown("<div class='admin-panel'>", unsafe_allow_html=True)
183
+ st.header("🔐 پنل مدیریت")
184
+
185
+ if not st.session_state.admin_logged_in:
186
+ admin_username = st.text_input("نام کاربری", placeholder="نام کاربری را وارد کنید")
187
+ admin_password = st.text_input("رمز عبور", type="password", placeholder="رمز عبور را وارد کنید")
188
+
189
+ if st.button("ورود", key="login_button"):
190
+ if admin_username == "admin" and admin_password == "password":
191
+ st.session_state.admin_logged_in = True
192
+ st.success("ورود موفقیت‌آمیز بود! 🎉")
193
+ st.experimental_rerun()
194
+ else:
195
+ st.error("نام کاربری یا رمز عبور اشتباه است! ❌")
196
+
197
+ else:
198
+ st.success("شما وارد شده‌اید! 👋")
199
+ if st.button("پاک کردن تاریخچه گفتگو", key="clear_history"):
200
+ chatbot.clear_history()
201
+ st.success("تاریخچه گفتگو پاک شد! 🗑️")
202
+ st.experimental_rerun()
203
+
204
+ if st.button("خروج", key="logout"):
205
+ st.session_state.admin_logged_in = False
206
  st.experimental_rerun()
207
+
208
+ st.markdown("</div>", unsafe_allow_html=True)
209
+
210
+ # بخش اصلی چت
211
+ st.title("💬 چت‌بات هوشمند")
212
+ st.markdown("<div class='chat-container'>", unsafe_allow_html=True)
213
+
214
+ # نمایش پیام‌ها
215
+ for msg in st.session_state.messages:
216
+ message_class = "user-message" if msg["role"] == "user" else "bot-message"
217
+ st.markdown(f"""
218
+ <div class='message {message_class}'>
219
+ <div class='message-content'>{msg["content"]}</div>
220
+ </div>
221
+ """, unsafe_allow_html=True)
222
+
223
+ st.markdown("</div>", unsafe_allow_html=True)
224
+
225
+ # بخش ورود پیام
226
+ st.markdown("<div class='input-container'>", unsafe_allow_html=True)
227
+ col1, col2 = st.columns([4, 1])
228
+
229
+ with col1:
230
+ user_input = st.text_input("", placeholder="پیام خود را اینجا بنویسید...", key="user_input")
231
+
232
+ with col2:
233
+ if st.button("ارسال", key="send"):
234
+ if user_input:
235
+ chatbot.chat_response(user_input)
236
+ st.experimental_rerun()
237
+
238
+ st.markdown("</div>", unsafe_allow_html=True)
239
+
240
+ if __name__ == "__main__":
241
+ chatbot = ModernChatbot()
242
+ main()