sanatization, on_typing and on_read

This commit is contained in:
PidgeyL
2015-12-31 17:09:41 +01:00
parent 113c8fb8bc
commit 1c0d7cf3e4
2 changed files with 41 additions and 19 deletions

View File

@@ -201,6 +201,9 @@ class Client(object):
:param message: a text that you want to send :param message: a text that you want to send
:param like: size of the like sticker you want to send :param like: size of the like sticker you want to send
""" """
# sanatize data:
if message:
message=message.encode("unicode-escape").decode("utf-8")
timestamp = now() timestamp = now()
date = datetime.now() date = datetime.now()
data = { data = {
@@ -398,7 +401,7 @@ class Client(object):
return j return j
def _getMessage(self, content): def _parseMessage(self, content):
''' '''
Get message and author name from content. Get message and author name from content.
May contains multiple messages in the content. May contains multiple messages in the content.
@@ -406,18 +409,31 @@ class Client(object):
if 'ms' not in content: if 'ms' not in content:
return return
for m in content['ms']: for m in content['ms']:
if m.get('type') not in ['m_messaging', 'messaging']: if m['type'] in ['m_messaging', 'messaging']:
continue try:
# look in 'message' mid = m['message']['mid']
try: message=m['message']['body']
mid = m['message']['mid'] fbid = m['message']['sender_fbid']
message=m['message']['body'] name = m['message']['sender_name']
fbid = m['message']['sender_fbid'] self.on_message(mid, fbid, name, message, m)
name = m['message']['sender_name'] except:
yield mid, fbid, name, message, m pass
except: elif m['type'] in ['typ']:
pass try:
fbid = m["from"]
self.on_typing(fbid)
except:
pass
elif m['type'] in ['m_read_receipt']:
try:
author = m['author']
reader = m['reader']
time = m['time']
self.on_read(author, reader, time)
except:
pass
else:
print(m)
def listen(self, markAlive=True): def listen(self, markAlive=True):
self.listening = True self.listening = True
@@ -431,15 +447,21 @@ class Client(object):
if markAlive: self.ping(sticky) if markAlive: self.ping(sticky)
try: try:
content = self._pullMessage(sticky, pool) content = self._pullMessage(sticky, pool)
self._parseMessage(content)
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
continue continue
# iterate through each message in response
for mid, fbid, name, message, meta in self._getMessage(content):
self.on_message(mid, fbid, name, message, meta)
except KeyboardInterrupt: except KeyboardInterrupt:
break break
except requests.exceptions.Timeout:
pass
def on_message(self, mid, author_id, author_name, message, metadata): def on_message(self, mid, author_id, author_name, message, metadata):
self.markAsDelivered(fbid, mid) self.markAsDelivered(author_id, mid)
self.markAsRead(fbid) self.markAsRead(author_id)
print("%s said: %s"%(author_name, message)) print("%s said: %s"%(author_name, message))
def on_typing(self, author_id):
pass
def on_read(self, author, reader, time):
pass

View File

@@ -15,7 +15,7 @@ def now():
return int(time()*1000) return int(time()*1000)
def get_json(text): def get_json(text):
return json.loads(re.sub(r"for.*(.*;.*;.*).*;", '', text.encode('utf-8').decode("unicode-escape"), 1)) return json.loads(re.sub(r"for.*(.*;.*;.*).*;", '', text.encode('utf-8').decode("unicode-escape"), 1))
def digit_to_char(digit): def digit_to_char(digit):
if digit < 10: if digit < 10: