| import streamlit as st |
| import hashlib |
| import datetime |
|
|
| |
| st.title("Simple IRC with Streamlit") |
|
|
| |
| messages = st.empty() |
| user_input = st.chat_input("Your message", key="message_input") |
|
|
| |
| message_history = [] |
|
|
| |
| 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() |
|
|
| |
| user_id = hashlib.sha256(st.report_thread.get_report_ctx().session.request.ip.encode()).hexdigest() |
|
|
| |
| message_handler.add_user(user_id) |
|
|
| |
| @st.cache(allow_output_mutation=True) |
| def on_submit(message): |
| |
| message_handler.send_message(user_id, message) |
|
|
| |
| user_input.on_submit(on_submit) |
|
|
| |
| 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) |
|
|
| |
| st.experimental_run_with_streamlit_app(main) |
|
|