DmitrMakeev commited on
Commit
d56557b
·
verified ·
1 Parent(s): 9a2ce93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +97 -1
app.py CHANGED
@@ -37,9 +37,12 @@ from pywebio.input import *
37
  from pywebio.output import *
38
  from pywebio.session import defer_call, info as session_info, run_async, run_js
39
  import asyncio
40
- #test
41
 
 
 
42
 
 
 
43
 
44
  # Замените на ваш реальный ключ Системы
45
  api_key_sys = os.getenv('api_key_sys')
@@ -2113,5 +2116,98 @@ def monitor():
2113
  },
2114
  cpu_count=cpu_count)
2115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2116
  if __name__ == '__main__':
2117
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
 
37
  from pywebio.output import *
38
  from pywebio.session import defer_call, info as session_info, run_async, run_js
39
  import asyncio
 
40
 
41
+ chat_msgs = []
42
+ online_users = set()
43
 
44
+ MAX_MESSAGES_COUNT = 100
45
+ #test
46
 
47
  # Замените на ваш реальный ключ Системы
48
  api_key_sys = os.getenv('api_key_sys')
 
2116
  },
2117
  cpu_count=cpu_count)
2118
 
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+ async def main():
2140
+ global chat_msgs
2141
+
2142
+ put_markdown("## 🧊 Добро пожаловать в онлайн чат!\nИсходный код данного чата укладывается в 100 строк кода!")
2143
+
2144
+ msg_box = output()
2145
+ put_scrollable(msg_box, height=300, keep_bottom=True)
2146
+
2147
+ nickname = await input("Войти в чат", required=True, placeholder="Ваше имя", validate=lambda n: "Такой ник уже используется!" if n in online_users or n == '📢' else None)
2148
+ online_users.add(nickname)
2149
+
2150
+ chat_msgs.append(('📢', f'`{nickname}` присоединился к чату!'))
2151
+ msg_box.append(put_markdown(f'📢 `{nickname}` присоединился к чату'))
2152
+
2153
+ refresh_task = run_async(refresh_msg(nickname, msg_box))
2154
+
2155
+ while True:
2156
+ data = await input_group("💭 Новое сообщение", [
2157
+ input(placeholder="Текст сообщения ...", name="msg"),
2158
+ actions(name="cmd", buttons=["Отправить", {'label': "Выйти из чата", 'type': 'cancel'}])
2159
+ ], validate = lambda m: ('msg', "Введите текст сообщения!") if m["cmd"] == "Отправить" and not m['msg'] else None)
2160
+
2161
+ if data is None:
2162
+ break
2163
+
2164
+ msg_box.append(put_markdown(f"`{nickname}`: {data['msg']}"))
2165
+ chat_msgs.append((nickname, data['msg']))
2166
+
2167
+ refresh_task.close()
2168
+
2169
+ online_users.remove(nickname)
2170
+ toast("Вы вышли из чата!")
2171
+ msg_box.append(put_markdown(f'📢 Пользователь `{nickname}` покинул чат!'))
2172
+ chat_msgs.append(('📢', f'Пользователь `{nickname}` покинул чат!'))
2173
+
2174
+ put_buttons(['Перезайти'], onclick=lambda btn:run_js('window.location.reload()'))
2175
+
2176
+ async def refresh_msg(nickname, msg_box):
2177
+ global chat_msgs
2178
+ last_idx = len(chat_msgs)
2179
+
2180
+ while True:
2181
+ await asyncio.sleep(1)
2182
+
2183
+ for m in chat_msgs[last_idx:]:
2184
+ if m[0] != nickname: # if not a message from current user
2185
+ msg_box.append(put_markdown(f"`{m[0]}`: {m[1]}"))
2186
+
2187
+ # remove expired
2188
+ if len(chat_msgs) > MAX_MESSAGES_COUNT:
2189
+ chat_msgs = chat_msgs[len(chat_msgs) // 2:]
2190
+
2191
+ last_idx = len(chat_msgs)
2192
+
2193
+ # Создаем маршрут для чата
2194
+ app.add_url_rule('/chat', 'webio_view', webio_view(main), methods=['GET', 'POST', 'OPTIONS'])
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+
2210
+
2211
+
2212
  if __name__ == '__main__':
2213
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))