deleted attribute of Message

and batter handling of deleted (unsended) messages
This commit is contained in:
Kacper Ziubryniewicz
2018-12-23 14:56:27 +01:00
parent b9d29c0417
commit 22e57f99a1
3 changed files with 17 additions and 6 deletions

View File

@@ -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)

View File

@@ -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):

View File

@@ -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__()