-
-
Save Priler/8c3eb5b26e6bcac57b56dc70b3277bba to your computer and use it in GitHub Desktop.
import asyncio | |
from pywebio import start_server | |
from pywebio.input import * | |
from pywebio.output import * | |
from pywebio.session import defer_call, info as session_info, run_async, run_js | |
chat_msgs = [] | |
online_users = set() | |
MAX_MESSAGES_COUNT = 100 | |
async def main(): | |
global chat_msgs | |
put_markdown("## 🧊 Добро пожаловать в онлайн чат!\nИсходный код данного чата укладывается в 100 строк кода!") | |
msg_box = output() | |
put_scrollable(msg_box, height=300, 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: # if not a message from current user | |
msg_box.append(put_markdown(f"`{m[0]}`: {m[1]}")) | |
# remove expired | |
if len(chat_msgs) > MAX_MESSAGES_COUNT: | |
chat_msgs = chat_msgs[len(chat_msgs) // 2:] | |
last_idx = len(chat_msgs) | |
if __name__ == "__main__": | |
start_server(main, debug=True, port=8080, cdn=False) |
Друзья помогите как локальний хост открыть для все , а то я пробую открыть на телефоне и пишет что локальний хост не не позволяет присоединиться
Друзья помогите как локальний хост открыть для все , а то я пробую открыть на телефоне и пишет что локальний хост не не позволяет присоединиться
На телефоне нельзя
Пахнет пастингом, всё в классике Хауди Хо)
@monojer010, твой вариант - repl.it
а как запустить?
как запустить проект? я пробовал включать локальный сервер и чот не вышло
в интернете говорили, что надо включать томкат и не сработало(
Ребят, помогите новичку, пожалуйста. Как сделать так, что бы он стал доступен в сети?
Хостинг нужен, например хероку или реплит (если бесплатный хостинг использовать), а платные я хз какие нормальные есть и поддерживают питон.
как запустить проект? я пробовал включать локальный сервер и чот не вышло в интернете говорили, что надо включать томкат и не сработало(
а ты порт подключил?
в коде
О чо нашел! https://github.com/pywebio/demos/blob/main/online_chatroom.py
404 кидает
Привет! Создал хост на джанго при помощи https://www.pythonanywhere.com а шо дальше? не пойму как добавить сервер в код что бы он запускался не только внутри моей сети.
есть версия без pywebio?
что делать если я запускаю код и у меня Traceback (most recent call last):
File "J:\Игрыфайлы\пайтон\скрипты\site.py", line 1, in
import asyncio
File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\asyncio_init_.py", line 8, in
from .base_events import *
File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 39, in
from . import coroutines
File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\asyncio\coroutines.py", line 5, in
import inspect
File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\inspect.py", line 59, in
for k, v in dis.COMPILER_FLAG_NAMES.items():
AttributeError: module 'dis' has no attribute 'COMPILER_FLAG_NAMES'
Друзья помогите как локальний хост открыть для все , а то я пробую открыть на телефоне и пишет что локальний хост не не позволяет присоединиться
если тебе по быстрому на телефоне хочется чекнуть как он работает, то тебе понадобится скачать ngrok, там в программе самой уже разберешься
классный код спс
Молодец, но я не говорил что автор данного кода + показал библиотеку и оставил ссылку не репозиторий из данной ссылки.
Хотя, мой вариант чата слегка упрощен.