From 232e126a89697c6c9b601697f8539e1906cd36b0 Mon Sep 17 00:00:00 2001 From: Chistopher Huntwork Date: Mon, 31 Jul 2023 11:35:34 -0700 Subject: [PATCH 1/2] added logging of message effects --- demo.py | 2 +- imessage.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/demo.py b/demo.py index 8632445..19afdc0 100644 --- a/demo.py +++ b/demo.py @@ -130,7 +130,7 @@ current_participants = [] while True: msg = im.receive() if msg is not None: - print(f'[{msg.sender}] {msg.text}') + print(msg.to_string()) if len(INPUT_QUEUE) > 0: msg = INPUT_QUEUE.pop() diff --git a/imessage.py b/imessage.py index 08c9476..5c0b59d 100644 --- a/imessage.py +++ b/imessage.py @@ -53,6 +53,8 @@ class iMessage: """Group ID of the message, will be randomly generated if not provided""" body: BalloonBody | None = None """BalloonBody, may be None""" + effect: str | None = None + """iMessage effect sent with this message, may be None""" _compressed: bool = True """Internal property representing whether the message should be compressed""" @@ -103,9 +105,8 @@ class iMessage: sender=message.get("p", [])[-1] if message.get("p", []) != [] else None, _id=uuid.UUID(message.get("r")) if "r" in message else None, group_id=uuid.UUID(message.get("gid")) if "gid" in message else None, - body=BalloonBody(message["bid"], message["b"]) - if "bid" in message - else None, + body=BalloonBody(message["bid"], message["b"]) if "bid" in message else None, + effect=message["iid"] if "iid" in message else None, _compressed=compressed, _raw=message, ) @@ -138,6 +139,12 @@ class iMessage: return d + def to_string(self) -> str: + message_str = f"[{self.sender}] '{self.text}'" + if self.effect is not None: + message_str += f" with effect [{self.effect}]" + return message_str + class iMessageUser: """Represents a logged in and connected iMessage user. From 0049f1178353bf921cbac230f222fd1fcb530a88 Mon Sep 17 00:00:00 2001 From: Chistopher Huntwork Date: Mon, 31 Jul 2023 11:47:27 -0700 Subject: [PATCH 2/2] added sending effects --- demo.py | 13 ++++++++++++- imessage.py | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/demo.py b/demo.py index 19afdc0..faa412c 100644 --- a/demo.py +++ b/demo.py @@ -127,6 +127,7 @@ threading.Thread(target=input_thread, daemon=True).start() print("Type 'help' for help") current_participants = [] +current_effect = None while True: msg = im.receive() if msg is not None: @@ -140,10 +141,18 @@ while True: print('quit (q): quit') #print('send (s) [recipient] [message]: send a message') print('filter (f) [recipient]: set the current chat') + print('effect (e): adds an iMessage effect to the next sent message') print('note: recipient must start with tel: or mailto: and include the country code') print('\\: escape commands (will be removed from message)') elif msg == 'quit' or msg == 'q': break + elif msg.startswith("effect ") or msg.startswith("e "): + msg = msg.split(" ") + if len(msg) < 2 or msg[1] == "": + print("effect [effect namespace]") + else: + print(f"next message will be sent with [{msg[1]}]") + current_effect = msg[1] elif msg.startswith('filter ') or msg.startswith('f '): # Set the curernt chat msg = msg.split(' ') @@ -158,8 +167,10 @@ while True: im.send(imessage.iMessage( text=msg, participants=current_participants, - sender=user.handles[0] + sender=user.handles[0], + effect=current_effect )) + current_effect = None else: print('No chat selected, use help for help') diff --git a/imessage.py b/imessage.py index 5c0b59d..4d3d839 100644 --- a/imessage.py +++ b/imessage.py @@ -125,6 +125,7 @@ class iMessage: "pv": 0, "gv": "8", "v": "1", + "iid": self.effect } # Remove keys that are None