From 23994791a058ac8611ec1997fc6a2ea8da86edb7 Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Sun, 17 Aug 2025 11:59:04 -0400 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 4 ++++ client.py | 18 ++++++++++++++++++ requirements.txt | 4 ++++ server.py | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 client.py create mode 100644 requirements.txt create mode 100644 server.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..09dd1da --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +venv/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..a6d5947 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Owncast Chat Logger +This code was taken from a blog post: https://mcgillij.dev/getting-owncast-chat-in-obs.html + +I have not found a way to wrap lines in OBS, so this repo is not being used. diff --git a/client.py b/client.py new file mode 100644 index 0000000..78463b0 --- /dev/null +++ b/client.py @@ -0,0 +1,18 @@ +import requests +import json + +webhook_url = 'http://localhost:5000/webhook' + +data = {'eventData': {'body': 'this is a test. testing 123. testing abc', + 'id': 'MHLpo7Hng', + 'rawBody': 'f', + 'timestamp': '2021-09-20T23:02:54.980066719Z', + 'user': {'createdAt': '2021-09-20T22:34:33.139297191Z', + 'displayColor': 22, + 'displayName': 'mcgillij', + 'id': 'avyQt7N7R', + 'previousNames': ['mcgillij']}, + 'visible': True}, + 'type': 'CHAT'} + +r = requests.post(webhook_url, data=json.dumps(data), headers={'Content-Type': 'application/json'}) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d477b98 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Flask +python-dateutil +python-dotenv +requests diff --git a/server.py b/server.py new file mode 100644 index 0000000..fbc583f --- /dev/null +++ b/server.py @@ -0,0 +1,34 @@ +from datetime import datetime +from dateutil import parser +from dotenv import load_dotenv +from flask import Flask, request, abort + +import os + +app = Flask(__name__) +load_dotenv() + +CHATLOG_FILE = os.getenv('CHATLOG_FILE', '/tmp/chat.txt') + +@app.route('/webhook', methods=['POST']) +def webhook(): + if request.method == 'POST': + message = request.json.get('eventData').get('body') + user = request.json.get('eventData').get('user').get('displayName') + timestamp = request.json.get('eventData').get('timestamp') + formatted = datetime.strftime(parser.isoparse(timestamp), '%H:%M:%S') + + if user and message and timestamp: + write_out_chatlog(formatted, user, message) + return 'success', 200 + else: + abort(400) + +def write_out_chatlog(timestamp, user, message): + with open(CHATLOG_FILE, mode='a') as chatlog: + chatlog.write(f"{timestamp} {user}: {message}\n") + + + +if __name__ == "__main__": + app.run(host='0.0.0.0')