Really-amin commited on
Commit
4f99fce
1 Parent(s): 21d8cd3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +158 -585
app.py CHANGED
@@ -1,585 +1,158 @@
1
- import streamlit as st
2
- import time
3
- import random
4
- import json
5
- from datetime import datetime
6
- import os
7
-
8
- # تنظیمات اصلی چت‌بات
9
- ADMIN_USERNAME = "admin"
10
- ADMIN_PASSWORD = "password"
11
-
12
- # CSS بهبود یافته با انیمیشن‌ها و افکت‌های جدید
13
- CUSTOM_CSS = """
14
- <style>
15
- @import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;700&display=swap');
16
- @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css');
17
-
18
- :root {
19
- --primary-color: #3b82f6;
20
- --secondary-color: #6366f1;
21
- --accent-color: #10b981;
22
- --background-color: #f8fafc;
23
- --chat-bg: #ffffff;
24
- --user-message-bg: #e0e7ff;
25
- --bot-message-bg: #f1f5f9;
26
- --text-primary: #1e293b;
27
- --text-secondary: #475569;
28
- --border-color: #e2e8f0;
29
- --error-color: #ef4444;
30
- --success-color: #22c55e;
31
- }
32
-
33
- /* === انیمیشن‌های جدید === */
34
- @keyframes slideIn {
35
- from { transform: translateY(20px); opacity: 0; }
36
- to { transform: translateY(0); opacity: 1; }
37
- }
38
-
39
- @keyframes pulse {
40
- 0% { transform: scale(1); }
41
- 50% { transform: scale(1.05); }
42
- 100% { transform: scale(1); }
43
- }
44
-
45
- @keyframes fadeIn {
46
- from { opacity: 0; }
47
- to { opacity: 1; }
48
- }
49
-
50
- /* === استایل‌های اصلی === */
51
- body {
52
- font-family: 'Vazirmatn', sans-serif !important;
53
- background-color: var(--background-color);
54
- direction: rtl;
55
- }
56
-
57
- .chat-container {
58
- max-width: 900px;
59
- margin: 2rem auto;
60
- background: var(--chat-bg);
61
- border-radius: 1rem;
62
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
63
- animation: slideIn 0.5s ease-out;
64
- }
65
-
66
- .chat-header {
67
- background: linear-gradient(to left, var(--primary-color), var(--secondary-color));
68
- color: white;
69
- padding: 1.5rem;
70
- border-radius: 1rem 1rem 0 0;
71
- text-align: center;
72
- position: relative;
73
- overflow: hidden;
74
- }
75
-
76
- .chat-header::before {
77
- content: '';
78
- position: absolute;
79
- top: -50%;
80
- left: -50%;
81
- width: 200%;
82
- height: 200%;
83
- background: linear-gradient(
84
- 45deg,
85
- transparent 0%,
86
- rgba(255, 255, 255, 0.1) 50%,
87
- transparent 100%
88
- );
89
- animation: shine 3s infinite linear;
90
- }
91
-
92
- @keyframes shine {
93
- from { transform: translateX(-100%) rotate(45deg); }
94
- to { transform: translateX(100%) rotate(45deg); }
95
- }
96
-
97
- .chat-header h1 {
98
- font-size: 1.75rem;
99
- font-weight: 700;
100
- margin: 0;
101
- display: flex;
102
- align-items: center;
103
- justify-content: center;
104
- gap: 0.75rem;
105
- }
106
-
107
- .chat-header h1 i {
108
- animation: pulse 2s infinite;
109
- }
110
-
111
- .chat-messages {
112
- height: 500px;
113
- overflow-y: auto;
114
- padding: 1.5rem;
115
- background: var(--chat-bg);
116
- scroll-behavior: smooth;
117
- }
118
-
119
- .message {
120
- margin-bottom: 1rem;
121
- max-width: 80%;
122
- padding: 1rem;
123
- border-radius: 0.75rem;
124
- position: relative;
125
- animation: fadeIn 0.3s ease-out;
126
- transition: transform 0.2s;
127
- }
128
-
129
- .message:hover {
130
- transform: translateY(-2px);
131
- }
132
-
133
- .message.user {
134
- background: var(--user-message-bg);
135
- margin-left: auto;
136
- color: var(--text-primary);
137
- box-shadow: 2px 2px 10px rgba(99, 102, 241, 0.1);
138
- }
139
-
140
- .message.bot {
141
- background: var(--bot-message-bg);
142
- margin-right: auto;
143
- color: var(--text-primary);
144
- box-shadow: 2px 2px 10px rgba(241, 245, 249, 0.3);
145
- }
146
-
147
- .message::before {
148
- content: '';
149
- position: absolute;
150
- width: 0;
151
- height: 0;
152
- border: 8px solid transparent;
153
- }
154
-
155
- .message.user::before {
156
- border-left-color: var(--user-message-bg);
157
- right: -16px;
158
- top: 50%;
159
- transform: translateY(-50%);
160
- }
161
-
162
- .message.bot::before {
163
- border-right-color: var(--bot-message-bg);
164
- left: -16px;
165
- top: 50%;
166
- transform: translateY(-50%);
167
- }
168
-
169
- .chat-input {
170
- padding: 1.5rem;
171
- border-top: 1px solid var(--border-color);
172
- display: flex;
173
- gap: 1rem;
174
- align-items: center;
175
- background: rgba(255, 255, 255, 0.9);
176
- backdrop-filter: blur(10px);
177
- }
178
-
179
- .chat-input input {
180
- flex: 1;
181
- padding: 0.75rem 1rem;
182
- border: 2px solid var(--border-color);
183
- border-radius: 0.5rem;
184
- font-family: 'Vazirmatn', sans-serif;
185
- font-size: 0.875rem;
186
- transition: all 0.3s;
187
- }
188
-
189
- .chat-input input:focus {
190
- outline: none;
191
- border-color: var(--primary-color);
192
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
193
- }
194
-
195
- .chat-input button {
196
- background: var(--primary-color);
197
- color: white;
198
- border: none;
199
- padding: 0.75rem 1.5rem;
200
- border-radius: 0.5rem;
201
- cursor: pointer;
202
- display: flex;
203
- align-items: center;
204
- gap: 0.5rem;
205
- transition: all 0.2s;
206
- font-weight: 500;
207
- }
208
-
209
- .chat-input button:hover {
210
- background: var(--secondary-color);
211
- transform: translateY(-2px);
212
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
213
- }
214
-
215
- .chat-input button:active {
216
- transform: translateY(0);
217
- }
218
-
219
- /* === قابلیت‌های جدید === */
220
- .typing-indicator {
221
- display: flex;
222
- gap: 0.5rem;
223
- padding: 1rem;
224
- background: var(--bot-message-bg);
225
- border-radius: 0.75rem;
226
- width: fit-content;
227
- margin-bottom: 1rem;
228
- animation: fadeIn 0.3s;
229
- }
230
-
231
- .typing-dot {
232
- width: 8px;
233
- height: 8px;
234
- background: var(--primary-color);
235
- border-radius: 50%;
236
- animation: typingDot 1s infinite;
237
- }
238
-
239
- .typing-dot:nth-child(2) { animation-delay: 0.2s; }
240
- .typing-dot:nth-child(3) { animation-delay: 0.4s; }
241
-
242
- @keyframes typingDot {
243
- 0%, 100% { transform: translateY(0); }
244
- 50% { transform: translateY(-5px); }
245
- }
246
-
247
- .quick-replies {
248
- display: flex;
249
- gap: 0.5rem;
250
- flex-wrap: wrap;
251
- margin-top: 1rem;
252
- }
253
-
254
- .quick-reply {
255
- background: var(--accent-color);
256
- color: white;
257
- padding: 0.5rem 1rem;
258
- border-radius: 2rem;
259
- cursor: pointer;
260
- transition: all 0.2s;
261
- font-size: 0.875rem;
262
- }
263
-
264
- .quick-reply:hover {
265
- transform: translateY(-2px);
266
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
267
- }
268
-
269
- /* === پنل مدیریت === */
270
- .admin-panel {
271
- background: white;
272
- padding: 1.5rem;
273
- border-radius: 0.75rem;
274
- margin-bottom: 1rem;
275
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
276
- }
277
-
278
- .admin-panel h2 {
279
- color: var(--text-primary);
280
- font-size: 1.25rem;
281
- margin-bottom: 1rem;
282
- display: flex;
283
- align-items: center;
284
- gap: 0.5rem;
285
- }
286
-
287
- .admin-controls {
288
- display: flex;
289
- flex-direction: column;
290
- gap: 1rem;
291
- }
292
-
293
- .admin-button {
294
- display: flex;
295
- align-items: center;
296
- gap: 0.5rem;
297
- padding: 0.75rem 1rem;
298
- border-radius: 0.5rem;
299
- cursor: pointer;
300
- transition: all 0.2s;
301
- border: none;
302
- font-family: 'Vazirmatn', sans-serif;
303
- font-weight: 500;
304
- }
305
-
306
- .admin-button.danger {
307
- background: var(--error-color);
308
- color: white;
309
- }
310
-
311
- .admin-button.success {
312
- background: var(--success-color);
313
- color: white;
314
- }
315
-
316
- .admin-button:hover {
317
- transform: translateY(-2px);
318
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
319
- }
320
-
321
- .statistics {
322
- background: white;
323
- padding: 1rem;
324
- border-radius: 0.5rem;
325
- margin-top: 1rem;
326
- }
327
-
328
- .stat-item {
329
- display: flex;
330
- justify-content: space-between;
331
- padding: 0.5rem 0;
332
- border-bottom: 1px solid var(--border-color);
333
- }
334
-
335
- .stat-item:last-child {
336
- border-bottom: none;
337
- }
338
- </style>
339
- """
340
-
341
- class EnhancedChatbot:
342
- def __init__(self):
343
- self.conversation_history = []
344
- self.admin_logged_in = False
345
- self.quick_replies = [
346
- "بخشنامه‌های جدید",
347
- "راهنمای استفاده",
348
- "تماس با پشتیبانی",
349
- "گزارش مشکل"
350
- ]
351
- self.stats = {
352
- 'total_messages': 0,
353
- 'user_messages': 0,
354
- 'bot_messages': 0,
355
- 'start_time': datetime.now()
356
- }
357
- self.load_responses()
358
-
359
- def load_responses(self):
360
- """بارگذاری پاسخ‌های از پیش تعریف شده"""
361
- self.responses = {
362
- 'greeting': [
363
- "سلام! چطور می‌تونم کمکتون کنم؟",
364
- "درود! من پاسخگوی هوشمند بخشنامه هستم. چه کمکی از دستم برمیاد؟",
365
- "خوش آمدید! در خدمت شما هستم."
366
- ],
367
- 'help': [
368
- "برای راهنمایی بیشتر می‌تونید از گزینه‌های سریع پایین استفاده کنید.",
369
- "من می‌تونم در موارد زیر کمکتون کنم:\n- جستجوی بخشنامه‌ها\n- پاسخ به سوالات متداول\n- راهنمایی در مورد فرآیندها",
370
- ],
371
- 'unknown': [
372
- "متوجه نشدم. می‌شه بیشتر توضیح بدید؟",
373
- "می‌تونید سوالتون رو به شکل دیگه‌ای بپرسید؟",
374
- "برای راهنمایی بهتر، لطفاً جزئیات بیشتری ارائه کنید."
375
- ]
376
- }
377
-
378
- def chat_response(self, message):
379
- """پردازش پیام کاربر و ارائه پاسخ هوشمند"""
380
- self.stats['total_messages'] += 1
381
- self.stats['user_messages'] += 1
382
-
383
- # افزودن پیام کاربر
384
- self.conversation_history.append({
385
- 'type': 'user',
386
- 'message': message,
387
- 'timestamp': datetime.now().strftime("%H:%M")
388
- })
389
-
390
- # شبیه‌سازی تایپ کردن
391
- time.sleep(1)
392
-
393
- # انتخاب پاسخ مناسب
394
- if any(word in message.lower() for word in ['سلام', 'درود', 'خوش آمدید']):
395
- response = random.choice(self.responses['greeting'])
396
- elif 'راهنمایی' in message.lower() or 'کمک' in message.lower():
397
- response = random.choice(self.responses['help'])
398
- else:
399
- response = random.choice(self.responses['unknown'])
400
-
401
- self.stats['bot_messages'] += 1
402
-
403
- # افزودن پاسخ ربات
404
- self.conversation_history.append({
405
- 'type': 'bot',
406
- 'message': response,
407
- 'timestamp': datetime.now().strftime("%H:%M")
408
- })
409
-
410
- return self.conversation_history
411
-
412
- def get_stats(self):
413
- """دریافت آمار چت‌بات"""
414
- uptime = datetime.now() - self.stats['start_time']
415
- return {
416
- 'total_messages': self.stats['total_messages'],
417
- 'user_messages': self.stats['user_messages'],
418
- 'bot_messages': self.stats['bot_messages'],
419
- 'uptime': str(uptime).split('.')[0],
420
- 'response_rate': f"{(self.stats['bot_messages'] / self.stats['user_messages'] * 100):.1f}%" if self.stats['user_messages'] > 0 else "0%"
421
- }
422
-
423
- # تنظیمات اولیه استریملیت
424
- # ادامه کد قبلی...
425
-
426
- # تنظیمات اولیه استریملیت
427
- st.set_page_config(
428
- page_title="پاسخگوی هوشمند بخشنامه",
429
- page_icon="🤖",
430
- layout="wide",
431
- initial_sidebar_state="expanded"
432
- )
433
-
434
- # اعمال CSS
435
- st.markdown(CUSTOM_CSS, unsafe_allow_html=True)
436
-
437
- # ایجاد نمونه از چت‌بات
438
- if 'chatbot' not in st.session_state:
439
- st.session_state.chatbot = EnhancedChatbot()
440
-
441
- # نمایش هدر اصلی
442
- st.markdown("""
443
- <div class="chat-container">
444
- <div class="chat-header">
445
- <h1>
446
- <i class="fas fa-robot"></i>
447
- پاسخگوی هوشمند بخشنامه
448
- <span class="status-badge online">
449
- <i class="fas fa-circle"></i>
450
- </span>
451
- </h1>
452
- </div>
453
- <div class="chat-messages" id="chat-messages">
454
- """, unsafe_allow_html=True)
455
-
456
- # نمایش پیام‌ها
457
- for message in st.session_state.chatbot.conversation_history:
458
- message_class = "user" if message['type'] == 'user' else "bot"
459
- icon = "user" if message['type'] == 'user' else "robot"
460
-
461
- st.markdown(f"""
462
- <div class="message {message_class}">
463
- <div class="message-header">
464
- <i class="fas fa-{icon}"></i>
465
- <span class="timestamp">{message['timestamp']}</span>
466
- </div>
467
- <div class="message-content">
468
- {message['message']}
469
- </div>
470
- </div>
471
- """, unsafe_allow_html=True)
472
-
473
- # نمایش نشانگر تایپ کردن
474
- if st.session_state.get('is_typing', False):
475
- st.markdown("""
476
- <div class="typing-indicator">
477
- <div class="typing-dot"></div>
478
- <div class="typing-dot"></div>
479
- <div class="typing-dot"></div>
480
- </div>
481
- """, unsafe_allow_html=True)
482
-
483
- # پاسخ‌های سریع
484
- st.markdown("""
485
- <div class="quick-replies">
486
- """, unsafe_allow_html=True)
487
-
488
- for reply in st.session_state.chatbot.quick_replies:
489
- st.markdown(f"""
490
- <div class="quick-reply" onclick="document.getElementById('user-input').value='{reply}'">
491
- {reply}
492
- </div>
493
- """, unsafe_allow_html=True)
494
-
495
- st.markdown("</div>", unsafe_allow_html=True)
496
-
497
- # بخش ورودی پیام
498
- col1, col2 = st.columns([4, 1])
499
- with col1:
500
- user_message = st.text_input(
501
- "",
502
- placeholder="پیام خود را بنویسید...",
503
- key="user_message",
504
- help="برای ارسال پیام، متن خود را وارد کرده و دکمه ارسال را بزنید"
505
- )
506
-
507
- with col2:
508
- send_button = st.button(
509
- "ارسال پیام",
510
- key="send_button",
511
- help="برای ارسال پیام کلیک کنید"
512
- )
513
-
514
- if send_button and user_message:
515
- st.session_state['is_typing'] = True
516
- st.session_state.chatbot.chat_response(user_message)
517
- st.session_state['is_typing'] = False
518
- st.experimental_rerun()
519
-
520
- st.markdown("</div>", unsafe_allow_html=True)
521
-
522
- # پنل مدیریت در سایدبار
523
- with st.sidebar:
524
- st.markdown("""
525
- <div class="admin-panel">
526
- <h2>
527
- <i class="fas fa-cog"></i>
528
- پنل مدیریت
529
- </h2>
530
- </div>
531
- """, unsafe_allow_html=True)
532
-
533
- if st.checkbox("نمایش آمار"):
534
- stats = st.session_state.chatbot.get_stats()
535
- st.markdown("""
536
- <div class="statistics">
537
- <h3>آمار سیستم</h3>
538
- """, unsafe_allow_html=True)
539
-
540
- for key, value in stats.items():
541
- st.markdown(f"""
542
- <div class="stat-item">
543
- <span>{key}:</span>
544
- <strong>{value}</strong>
545
- </div>
546
- """, unsafe_allow_html=True)
547
-
548
- st.markdown("</div>", unsafe_allow_html=True)
549
-
550
- if st.button("پاک کردن تاریخچه", key="clear_history"):
551
- st.session_state.chatbot.conversation_history = []
552
- st.experimental_rerun()
553
-
554
- # تنظیمات ظاهری
555
- st.markdown("### تنظیمات ظاهری")
556
- font_size = st.slider("اندازه متن", 12, 20, 14)
557
- st.markdown(f"""
558
- <style>
559
- .message {{ font-size: {font_size}px; }}
560
- </style>
561
- """, unsafe_allow_html=True)
562
-
563
- # اضافه کردن اسکریپت‌های جاوااسکریپت برای عملکرد بهتر
564
- st.markdown("""
565
- <script>
566
- // اسکرول خودکار به آخرین پیام
567
- function scrollToBottom() {
568
- const messages = document.querySelector('.chat-messages');
569
- messages.scrollTop = messages.scrollHeight;
570
- }
571
-
572
- // اجرای اسکرول در لود صفحه
573
- window.onload = scrollToBottom;
574
-
575
- // مدیریت کلیدهای میانبر
576
- document.addEventListener('keydown', function(event) {
577
- if (event.key === 'Enter' && !event.shiftKey) {
578
- const sendButton = document.querySelector('button:contains("ارسال پیام")');
579
- if (sendButton) {
580
- sendButton.click();
581
- }
582
- }
583
- });
584
- </script>
585
- """, unsafe_allow_html=True)
 
1
+ import streamlit as st
2
+ import time
3
+ import random
4
+ from datetime import datetime
5
+
6
+ # CSS بهبود یافته با دکمه‌های جدید
7
+ CUSTOM_CSS = """
8
+ <style>
9
+ @import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;700&display=swap');
10
+
11
+ :root {
12
+ --primary-color: #3b82f6;
13
+ --secondary-color: #6366f1;
14
+ --background-color: #f8fafc;
15
+ --button-bg: #10b981;
16
+ --button-hover: #0d946b;
17
+ --button-text: #ffffff;
18
+ }
19
+
20
+ body {
21
+ font-family: 'Vazirmatn', sans-serif;
22
+ background-color: var(--background-color);
23
+ direction: rtl;
24
+ }
25
+
26
+ .chat-container {
27
+ max-width: 900px;
28
+ margin: 2rem auto;
29
+ background: var(--background-color);
30
+ border-radius: 1rem;
31
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
32
+ }
33
+
34
+ .chat-header {
35
+ background: linear-gradient(to left, var(--primary-color), var(--secondary-color));
36
+ color: white;
37
+ padding: 1rem;
38
+ text-align: center;
39
+ border-radius: 1rem 1rem 0 0;
40
+ font-size: 1.5rem;
41
+ font-weight: 600;
42
+ }
43
+
44
+ .chat-messages {
45
+ height: 500px;
46
+ overflow-y: auto;
47
+ padding: 1rem;
48
+ }
49
+
50
+ .message {
51
+ margin-bottom: 1rem;
52
+ padding: 1rem;
53
+ border-radius: 0.5rem;
54
+ }
55
+
56
+ .message.user {
57
+ background: #e0e7ff;
58
+ color: #1e293b;
59
+ }
60
+
61
+ .message.bot {
62
+ background: #f1f5f9;
63
+ color: #475569;
64
+ }
65
+
66
+ .quick-replies {
67
+ display: flex;
68
+ gap: 0.5rem;
69
+ margin-top: 1rem;
70
+ flex-wrap: wrap;
71
+ }
72
+
73
+ .quick-reply {
74
+ background: var(--button-bg);
75
+ color: var(--button-text);
76
+ padding: 0.5rem 1rem;
77
+ border-radius: 20px;
78
+ cursor: pointer;
79
+ transition: all 0.2s;
80
+ font-size: 0.9rem;
81
+ text-align: center;
82
+ }
83
+
84
+ .quick-reply:hover {
85
+ background: var(--button-hover);
86
+ transform: scale(1.05);
87
+ }
88
+ </style>
89
+ """
90
+
91
+ st.markdown(CUSTOM_CSS, unsafe_allow_html=True)
92
+
93
+ class EnhancedChatbot:
94
+ def __init__(self):
95
+ self.conversation_history = []
96
+ self.quick_replies = [
97
+ "بخشنامه‌های جدید",
98
+ "راهنمای استفاده",
99
+ "تماس با پشتیبانی",
100
+ "گزارش مشکل"
101
+ ]
102
+
103
+ def chat_response(self, message):
104
+ """پردازش پیام کاربر و ارائه پاسخ هوشمند"""
105
+ self.conversation_history.append({'type': 'user', 'message': message})
106
+
107
+ # شبیه‌سازی پاسخ ربات
108
+ time.sleep(1)
109
+ response = random.choice([
110
+ "این بخشنامه جدید است.",
111
+ "برای استفاده از سیستم، لطفاً مراحل زیر را دنبال کنید.",
112
+ "با پشتیبانی تماس بگیرید.",
113
+ "لطفاً مشکل خود را با جزئیات بیان کنید."
114
+ ])
115
+
116
+ self.conversation_history.append({'type': 'bot', 'message': response})
117
+
118
+ # تنظیمات اولیه استریملیت
119
+ st.set_page_config(
120
+ page_title="پاسخگوی هوشمند بخشنامه",
121
+ page_icon="🤖",
122
+ layout="wide",
123
+ initial_sidebar_state="expanded"
124
+ )
125
+
126
+ # ایجاد نمونه از چت‌بات
127
+ if 'chatbot' not in st.session_state:
128
+ st.session_state.chatbot = EnhancedChatbot()
129
+
130
+ # نمایش هدر اصلی
131
+ st.markdown("""
132
+ <div class="chat-container">
133
+ <div class="chat-header">پاسخگوی هوشمند بخشنامه</div>
134
+ <div class="chat-messages" id="chat-messages">
135
+ """, unsafe_allow_html=True)
136
+
137
+ # نمایش پیام‌ها
138
+ for message in st.session_state.chatbot.conversation_history:
139
+ message_class = "user" if message['type'] == 'user' else "bot"
140
+ st.markdown(f"""
141
+ <div class="message {message_class}">
142
+ {message['message']}
143
+ </div>
144
+ """, unsafe_allow_html=True)
145
+
146
+ # پاسخ‌های سریع
147
+ st.markdown("""<div class="quick-replies">""", unsafe_allow_html=True)
148
+ for reply in st.session_state.chatbot.quick_replies:
149
+ st.markdown(f"""<div class="quick-reply">{reply}</div>""", unsafe_allow_html=True)
150
+ st.markdown("</div>", unsafe_allow_html=True)
151
+
152
+ # بخش ورودی پیام
153
+ user_message = st.text_input("پیام خود را بنویسید...", key="user_message")
154
+ if st.button("ارسال پیام") and user_message:
155
+ st.session_state.chatbot.chat_response(user_message)
156
+ st.experimental_rerun()
157
+
158
+ st.markdown("</div>", unsafe_allow_html=True)