sanatization, on_typing and on_read
This commit is contained in:
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user