File size: 2,252 Bytes
5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 33109c7 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 5c8e132 fffe3d5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import streamlit as st
import hashlib
import datetime
# Streamlitの設定
st.title("Simple IRC with Streamlit")
# チャットメッセージと入力欄のコンポーネントを設定
messages = st.empty()
user_input = st.chat_input("Your message", key="message_input")
# サーバーでメッセージを保存するためのリスト
message_history = []
# Socket.IOを模した簡単なメッセージングシステムの実装
class MessageHandler:
def __init__(self):
self.connected_users = set()
def add_user(self, user_id):
self.connected_users.add(user_id)
def remove_user(self, user_id):
self.connected_users.remove(user_id)
def send_message(self, user_id, message):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
formatted_message = f"{timestamp} - {user_id}: {message}"
message_history.append(formatted_message)
self.refresh_messages()
def refresh_messages(self):
messages.markdown("\n".join(message_history), unsafe_allow_html=True)
# メッセージハンドラの初期化
message_handler = MessageHandler()
# ユーザーのIPアドレスをハッシュ化して名前として使用
user_id = hashlib.sha256(st.report_thread.get_report_ctx().session.request.ip.encode()).hexdigest()
# ユーザーをサーバーに追加
message_handler.add_user(user_id)
# Streamlit chat inputのコールバック
@st.cache(allow_output_mutation=True)
def on_submit(message):
# メッセージを送信
message_handler.send_message(user_id, message)
# Streamlit chat inputのイベントハンドラの設定
user_input.on_submit(on_submit)
# Streamlitアプリの実行
if __name__ == "__main__":
st.set_page_config(page_title="IRC with Streamlit")
# ユーザーがアクセスするたびに新しいセッションが作成されるようにする
st.experimental_singleton(message_handler)
# チャットメッセージの更新を定期的に行う
st.text("Connected Users: " + ", ".join(message_handler.connected_users))
st.text("Refreshed every 5 seconds")
st.text("Your hashed name: " + user_id)
# Streamlitアプリを実行
st.experimental_run_with_streamlit_app(main)
|