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)))
|