Import teepee scripts

This commit is contained in:
Joscha 2024-03-09 15:21:21 +01:00
parent 9ebcabbf36
commit e6e2a57d16
3 changed files with 253 additions and 0 deletions

View file

@ -0,0 +1,113 @@
import argparse
import json
import re
import time
import requests
import websockets.sync.client as ws
class Room:
def __init__(self, addr, name, nick):
self.addr = addr
self.name = name
self.nick = nick
self.send_reply_id = None
self.print_thread_mid = None
self.ws = None
self.next_id = 0
def run(self):
while True:
self.ws = ws.connect(f"wss://euphoria.leet.nu/room/{self.name}/ws")
try:
while True:
packet = self.ws.recv()
packet = json.loads(packet)
self._on_packet(packet)
except Exception as e:
print("Oop:", e)
time.sleep(10)
print("Stopped")
def _send(self, ptype, **data):
cur_ws = self.ws
if cur_ws is None:
return
pid = f"{self.next_id}"
self.next_id += 1
packet = {
"id": pid,
"type": ptype,
"data": data,
}
packet = json.dumps(packet)
cur_ws.send(packet)
return pid
def _on_packet(self, packet):
data = packet.get("data", {})
match packet["type"]:
case "ping-event":
self._on_ping_event(data)
case "snapshot-event":
self._on_snapshot_event(data)
case "send-reply":
self._on_send_reply(packet)
case "send-event":
self._on_send_event(data)
def _on_ping_event(self, data):
self._send("ping-reply", time=data["time"])
def _on_snapshot_event(self, data):
self._send("nick", name=self.nick)
self.send_reply_id = self._send(
"send", content="Direct replies to this message will be printed."
)
def _on_send_reply(self, packet):
if packet.get("id") == self.send_reply_id:
print("Received send-reply")
self.print_thread_mid = packet["data"]["id"]
def _on_send_event(self, data):
if not self.print_thread_mid:
return
if self.print_thread_mid != data.get("parent"):
return
data = {
"username": data["sender"]["name"],
"content": data["content"],
}
print("Posting", data)
try:
requests.post(f"http://{self.addr}/chat_message", data=data)
except Exception as e:
print("Oop:", e)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("addr")
parser.add_argument("room")
parser.add_argument("nick")
args = parser.parse_args()
room = Room(args.addr, args.room, args.nick)
room.run()
if __name__ == "__main__":
main()