diff --git a/fbchat/client.py b/fbchat/client.py index fbc4686..9a17620 100644 --- a/fbchat/client.py +++ b/fbchat/client.py @@ -2393,6 +2393,7 @@ class Client(object): sticker = None attachments = [] + deleted = False if delta.get('attachments'): try: for a in delta['attachments']: @@ -2400,7 +2401,7 @@ class Client(object): if mercury.get('blob_attachment'): image_metadata = a.get('imageMetadata', {}) attach_type = mercury['blob_attachment']['__typename'] - attachment = graphql_to_attachment(mercury.get('blob_attachment', {})) + attachment = graphql_to_attachment(mercury['blob_attachment']) if attach_type in ['MessageFile', 'MessageVideo', 'MessageAudio']: # TODO: Add more data here for audio files @@ -2408,11 +2409,13 @@ class Client(object): attachments.append(attachment) elif mercury.get('sticker_attachment'): - sticker = graphql_to_sticker(a['mercury']['sticker_attachment']) + sticker = graphql_to_sticker(mercury['sticker_attachment']) elif mercury.get('extensible_attachment'): - attachment = graphql_to_extensible_attachment(mercury.get('extensible_attachment', {})) - if attachment: + attachment = graphql_to_extensible_attachment(mercury['extensible_attachment']) + if isinstance(attachment, DeletedMessage): + deleted = True + elif attachment: attachments.append(attachment) except Exception: @@ -2426,12 +2429,13 @@ class Client(object): mentions=mentions, emoji_size=emoji_size, sticker=sticker, - attachments=attachments + attachments=attachments, ) message.uid = mid message.author = author_id message.timestamp = ts #message.reactions = {} + message.deleted = deleted thread_id, thread_type = getThreadIdAndThreadType(metadata) self.onMessage(mid=mid, author_id=author_id, message=delta.get('body', ''), message_object=message, thread_id=thread_id, thread_type=thread_type, ts=ts, metadata=metadata, msg=m) diff --git a/fbchat/graphql.py b/fbchat/graphql.py index 0d6c5d2..362134c 100644 --- a/fbchat/graphql.py +++ b/fbchat/graphql.py @@ -288,7 +288,11 @@ def graphql_to_message(message): if message.get('blob_attachments') is not None: rtn.attachments = [graphql_to_attachment(attachment) for attachment in message['blob_attachments']] if message.get('extensible_attachment') is not None: - rtn.attachments.append(graphql_to_extensible_attachment(message['extensible_attachment'])) + attachment = graphql_to_extensible_attachment(message['extensible_attachment']) + if isinstance(attachment, DeletedMessage): + rtn.deleted = True + elif attachment: + rtn.attachments.append(attachment) return rtn def graphql_to_user(user): diff --git a/fbchat/models.py b/fbchat/models.py index f038b59..55b6407 100644 --- a/fbchat/models.py +++ b/fbchat/models.py @@ -188,6 +188,8 @@ class Message(object): sticker = None #: A list of attachments attachments = None + #: Whether the message is deleted (unsended) + deleted = None def __init__(self, text=None, mentions=None, emoji_size=None, sticker=None, attachments=None): """Represents a Facebook message""" @@ -201,6 +203,7 @@ class Message(object): attachments = [] self.attachments = attachments self.reactions = {} + self.deleted = False def __repr__(self): return self.__unicode__()