12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import asyncio
- from pywebio import start_server
- from pywebio.input import *
- from pywebio.output import *
- from pywebio.session import run_async, run_js
- chat_msgs = []
- online_users = set()
- MAX_MSGS_COUNT = 100
- async def main():
- global chat_msgs
- put_markdown('## 😈 Всем доброго времени бытия!\nСегодня начнём за террористов, там посмотрим')
- msg_box = output()
- put_scrollable(msg_box, height=500, keep_bottom=True)
- nickname = await input(
- 'Зайти в базу', required=True, placeholder='Твой ник',
- validate=lambda n: 'Эй балбес, ник норм придумай' if n in online_users or n == '🗣' else None
- )
- online_users.add(nickname)
- chat_msgs.append(('🗣', f' `{nickname}` прибыл на базу!'))
- msg_box.append(put_markdown(f' `{nickname}` прибыл на базу!'))
- refresh_task = run_async(refresh_msg(nickname, msg_box))
- while True:
- data = await input_group(
- '💭 Новое сообщение', [
- input(placeholder='Текст сообщения', name='msg'),
- actions(name='cmd', buttons=['Отправить', {'label': 'Выйти с базы', 'type': 'cancel'}])
- ],
- validate=lambda m: ('msg', 'Введите текст сообщения') if m['cmd'] == 'Отправить' and not m['msg'] else None
- )
- if data is None:
- break
- msg_box.append(put_markdown(f"`{nickname}`: {data['msg']}"))
- chat_msgs.append((nickname, data['msg']))
- refresh_task.close()
- online_users.remove(nickname)
- toast("Вы вышли из чата!")
- msg_box.append(put_markdown(f'📢 `{nickname}` покинул чат!'))
- chat_msgs.append(('📢', f' `{nickname}` покинул чат!'))
- put_buttons(['Перезайти'], onclick=lambda btn: run_js('window.location.reload()'))
- async def refresh_msg(nickname, msg_box):
- global chat_msgs
- last_idx = len(chat_msgs)
- while True:
- await asyncio.sleep(1)
- for m in chat_msgs[last_idx:]:
- if m[0] != nickname:
- msg_box.append(put_markdown(f"`{m[0]}`: {m[1]}"))
- if len(chat_msgs) > MAX_MSGS_COUNT:
- chat_msgs = chat_msgs[len(chat_msgs) // 2:]
- last_idx = len(chat_msgs)
- if __name__ == "__main__":
- start_server(main, debug=True, port=8078, cdn=False)
|