From 74a98d7eb3dfd39cf3226b270ba837c08fb611f8 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Tue, 21 Jan 2020 19:50:33 +0100 Subject: [PATCH] Fix MessagesDelivered user parsing --- fbchat/_delta_class.py | 5 ++++- tests/test_delta_class.py | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/fbchat/_delta_class.py b/fbchat/_delta_class.py index 401e3d3..e2c2c12 100644 --- a/fbchat/_delta_class.py +++ b/fbchat/_delta_class.py @@ -99,8 +99,11 @@ class MessagesDelivered(ThreadEvent): @classmethod def _parse(cls, session, data): - author = _user.User(session=session, id=data["actorFbId"]) thread = cls._get_thread(session, data) + if "actorFbId" in data: + author = _user.User(session=session, id=data["actorFbId"]) + else: + author = thread messages = [_message.Message(thread=thread, id=x) for x in data["messageIds"]] at = _util.millis_to_datetime(int(data["deliveredWatermarkTimestampMs"])) return cls(author=author, thread=thread, messages=messages, at=at) diff --git a/tests/test_delta_class.py b/tests/test_delta_class.py index 864f5e4..027964b 100644 --- a/tests/test_delta_class.py +++ b/tests/test_delta_class.py @@ -133,7 +133,7 @@ def test_forced_fetch(session): ) == parse_delta(session, data) -def test_delivery_receipt(session): +def test_delivery_receipt_group(session): data = { "actorFbId": "1234", "deliveredWatermarkTimestampMs": "1500000000000", @@ -156,6 +156,28 @@ def test_delivery_receipt(session): ) == parse_delta(session, data) +def test_delivery_receipt_user(session): + data = { + "deliveredWatermarkTimestampMs": "1500000000000", + "irisSeqId": "1111111", + "irisTags": ["DeltaDeliveryReceipt", "is_from_iris_fanout"], + "messageIds": ["mid.$XYZ", "mid.$ABC"], + "requestContext": {"apiArgs": {}}, + "threadKey": {"otherUserFbId": "1234"}, + "class": "DeliveryReceipt", + } + thread = User(session=session, id="1234") + assert MessagesDelivered( + author=thread, + thread=thread, + messages=[ + Message(thread=thread, id="mid.$XYZ"), + Message(thread=thread, id="mid.$ABC"), + ], + at=datetime.datetime(2017, 7, 14, 2, 40, tzinfo=datetime.timezone.utc), + ) == parse_delta(session, data) + + def test_read_receipt(session): data = { "actionTimestampMs": "1600000000000",