Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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)))
|