Better quick reply types
This commit is contained in:
@@ -1068,11 +1068,13 @@ class Client(object):
|
|||||||
xmd = {"quick_replies": []}
|
xmd = {"quick_replies": []}
|
||||||
for quick_reply in message.quick_replies:
|
for quick_reply in message.quick_replies:
|
||||||
q = dict()
|
q = dict()
|
||||||
q["content_type"] = quick_reply.type.value.lower()
|
q["content_type"] = quick_reply._type
|
||||||
q["payload"] = quick_reply.payload
|
q["payload"] = quick_reply.payload
|
||||||
|
q["external_payload"] = quick_reply.external_payload
|
||||||
q["data"] = quick_reply.data
|
q["data"] = quick_reply.data
|
||||||
if quick_reply.type == QuickReplyType.TEXT: q["title"] = quick_reply.title
|
if quick_reply.is_response: q["ignore_for_webhook"] = False
|
||||||
if quick_reply.type is not QuickReplyType.LOCATION: q["image_url"] = quick_reply.image_url
|
if quick_reply._type == QuickReplyText._type: q["title"] = quick_reply.title
|
||||||
|
if quick_reply._type is not QuickReplyLocation._type: q["image_url"] = quick_reply.image_url
|
||||||
xmd["quick_replies"].append(q)
|
xmd["quick_replies"].append(q)
|
||||||
if len(message.quick_replies) == 1 and message.quick_replies[0].is_response:
|
if len(message.quick_replies) == 1 and message.quick_replies[0].is_response:
|
||||||
xmd["quick_replies"] = xmd["quick_replies"][0]
|
xmd["quick_replies"] = xmd["quick_replies"][0]
|
||||||
@@ -1163,14 +1165,14 @@ class Client(object):
|
|||||||
:raises: FBchatException if request failed
|
:raises: FBchatException if request failed
|
||||||
"""
|
"""
|
||||||
quick_reply.is_response = True
|
quick_reply.is_response = True
|
||||||
if quick_reply.type == QuickReplyType.TEXT:
|
if isinstance(quick_reply, QuickReplyText):
|
||||||
return self.send(Message(text=quick_reply.title, quick_replies=[quick_reply]))
|
return self.send(Message(text=quick_reply.title, quick_replies=[quick_reply]))
|
||||||
elif quick_reply.type == QuickReplyType.EMAIL:
|
elif isinstance(quick_reply, QuickReplyEmail):
|
||||||
if not payload: payload = self.getEmails()[0]
|
if not payload: payload = self.getEmails()[0]
|
||||||
quick_reply.external_payload = quick_reply.payload
|
quick_reply.external_payload = quick_reply.payload
|
||||||
quick_reply.payload = payload
|
quick_reply.payload = payload
|
||||||
return self.send(Message(text=payload, quick_replies=[quick_reply]))
|
return self.send(Message(text=payload, quick_replies=[quick_reply]))
|
||||||
elif quick_reply.type == QuickReplyType.PHONE_NUMBER:
|
elif isinstance(quick_reply, QuickReplyPhoneNumber):
|
||||||
if not payload: payload = self.getPhoneNumbers()[0]
|
if not payload: payload = self.getPhoneNumbers()[0]
|
||||||
quick_reply.external_payload = quick_reply.payload
|
quick_reply.external_payload = quick_reply.payload
|
||||||
quick_reply.payload = payload
|
quick_reply.payload = payload
|
||||||
|
@@ -270,19 +270,19 @@ def graphql_to_plan(a):
|
|||||||
|
|
||||||
def graphql_to_quick_reply(q, is_response=False):
|
def graphql_to_quick_reply(q, is_response=False):
|
||||||
data = dict()
|
data = dict()
|
||||||
_type = QuickReplyType(q.get('content_type').upper())
|
_type = q.get('content_type').lower()
|
||||||
if q.get('payload'): data["payload"] = q["payload"]
|
if q.get('payload'): data["payload"] = q["payload"]
|
||||||
if q.get('data'): data["data"] = q["data"]
|
if q.get('data'): data["data"] = q["data"]
|
||||||
if q.get('image_url') and _type is not QuickReplyType.LOCATION: data["image_url"] = q["image_url"]
|
if q.get('image_url') and _type is not QuickReplyLocation._type: data["image_url"] = q["image_url"]
|
||||||
data["is_response"] = is_response
|
data["is_response"] = is_response
|
||||||
if _type == QuickReplyType.TEXT:
|
if _type == QuickReplyText._type:
|
||||||
if q.get('title') is not None: data["title"] = q["title"]
|
if q.get('title') is not None: data["title"] = q["title"]
|
||||||
rtn = QuickReplyText(**data)
|
rtn = QuickReplyText(**data)
|
||||||
elif _type == QuickReplyType.LOCATION:
|
elif _type == QuickReplyLocation._type:
|
||||||
rtn = QuickReplyLocation(**data)
|
rtn = QuickReplyLocation(**data)
|
||||||
elif _type == QuickReplyType.PHONE_NUMBER:
|
elif _type == QuickReplyPhoneNumber._type:
|
||||||
rtn = QuickReplyPhoneNumber(**data)
|
rtn = QuickReplyPhoneNumber(**data)
|
||||||
elif _type == QuickReplyType.EMAIL:
|
elif _type == QuickReplyEmail._type:
|
||||||
rtn = QuickReplyEmail(**data)
|
rtn = QuickReplyEmail(**data)
|
||||||
return rtn
|
return rtn
|
||||||
|
|
||||||
|
@@ -527,8 +527,6 @@ class Mention(object):
|
|||||||
return '<Mention {}: offset={} length={}>'.format(self.thread_id, self.offset, self.length)
|
return '<Mention {}: offset={} length={}>'.format(self.thread_id, self.offset, self.length)
|
||||||
|
|
||||||
class QuickReply(object):
|
class QuickReply(object):
|
||||||
#: Type of the quick reply
|
|
||||||
type = None
|
|
||||||
#: Payload of the quick reply
|
#: Payload of the quick reply
|
||||||
payload = None
|
payload = None
|
||||||
#: External payload for responses
|
#: External payload for responses
|
||||||
@@ -538,9 +536,8 @@ class QuickReply(object):
|
|||||||
#: Whether it's a response for a quick reply
|
#: Whether it's a response for a quick reply
|
||||||
is_response = None
|
is_response = None
|
||||||
|
|
||||||
def __init__(self, _type=None, payload=None, data=None, is_response=False):
|
def __init__(self, payload=None, data=None, is_response=False):
|
||||||
"""Represents a quick reply"""
|
"""Represents a quick reply"""
|
||||||
self.type = _type
|
|
||||||
self.payload = payload
|
self.payload = payload
|
||||||
self.data = data
|
self.data = data
|
||||||
self.is_response = is_response
|
self.is_response = is_response
|
||||||
@@ -556,36 +553,44 @@ class QuickReplyText(QuickReply):
|
|||||||
title = None
|
title = None
|
||||||
#: URL of the quick reply image (optional)
|
#: URL of the quick reply image (optional)
|
||||||
image_url = None
|
image_url = None
|
||||||
|
#: Type of the quick reply
|
||||||
|
_type = "text"
|
||||||
|
|
||||||
def __init__(self, title=None, image_url=None, **kwargs):
|
def __init__(self, title=None, image_url=None, **kwargs):
|
||||||
"""Represents a text quick reply"""
|
"""Represents a text quick reply"""
|
||||||
super(QuickReplyText, self).__init__(_type=QuickReplyType.TEXT, **kwargs)
|
super(QuickReplyText, self).__init__(**kwargs)
|
||||||
self.title = title
|
self.title = title
|
||||||
self.image_url = image_url
|
self.image_url = image_url
|
||||||
|
|
||||||
class QuickReplyLocation(QuickReply):
|
class QuickReplyLocation(QuickReply):
|
||||||
|
#: Type of the quick reply
|
||||||
|
_type = "location"
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
"""Represents a location quick reply (Doesn't work on mobile)"""
|
"""Represents a location quick reply (Doesn't work on mobile)"""
|
||||||
super(QuickReplyLocation, self).__init__(_type=QuickReplyType.LOCATION, **kwargs)
|
super(QuickReplyLocation, self).__init__(**kwargs)
|
||||||
self.is_response = False
|
self.is_response = False
|
||||||
|
|
||||||
class QuickReplyPhoneNumber(QuickReply):
|
class QuickReplyPhoneNumber(QuickReply):
|
||||||
#: URL of the quick reply image (optional)
|
#: URL of the quick reply image (optional)
|
||||||
image_url = None
|
image_url = None
|
||||||
|
#: Type of the quick reply
|
||||||
|
_type = "user_phone_number"
|
||||||
|
|
||||||
def __init__(self, image_url=None, **kwargs):
|
def __init__(self, image_url=None, **kwargs):
|
||||||
"""Represents a phone number quick reply (Doesn't work on mobile)"""
|
"""Represents a phone number quick reply (Doesn't work on mobile)"""
|
||||||
super(QuickReplyPhoneNumber, self).__init__(_type=QuickReplyType.PHONE_NUMBER, **kwargs)
|
super(QuickReplyPhoneNumber, self).__init__(**kwargs)
|
||||||
self.image_url = image_url
|
self.image_url = image_url
|
||||||
|
|
||||||
class QuickReplyEmail(QuickReply):
|
class QuickReplyEmail(QuickReply):
|
||||||
#: URL of the quick reply image (optional)
|
#: URL of the quick reply image (optional)
|
||||||
image_url = None
|
image_url = None
|
||||||
|
#: Type of the quick reply
|
||||||
|
_type = "user_email"
|
||||||
|
|
||||||
def __init__(self, image_url=None, **kwargs):
|
def __init__(self, image_url=None, **kwargs):
|
||||||
"""Represents an email quick reply (Doesn't work on mobile)"""
|
"""Represents an email quick reply (Doesn't work on mobile)"""
|
||||||
super(QuickReplyEmail, self).__init__(_type=QuickReplyType.EMAIL, **kwargs)
|
super(QuickReplyEmail, self).__init__(**kwargs)
|
||||||
self.image_url = image_url
|
self.image_url = image_url
|
||||||
|
|
||||||
class Poll(object):
|
class Poll(object):
|
||||||
@@ -675,12 +680,6 @@ class Enum(enum.Enum):
|
|||||||
# For documentation:
|
# For documentation:
|
||||||
return '{}.{}'.format(type(self).__name__, self.name)
|
return '{}.{}'.format(type(self).__name__, self.name)
|
||||||
|
|
||||||
class QuickReplyType(Enum):
|
|
||||||
TEXT = 'TEXT'
|
|
||||||
LOCATION = 'LOCATION'
|
|
||||||
PHONE_NUMBER = 'USER_PHONE_NUMBER'
|
|
||||||
EMAIL = 'USER_EMAIL'
|
|
||||||
|
|
||||||
class ThreadType(Enum):
|
class ThreadType(Enum):
|
||||||
"""Used to specify what type of Facebook thread is being used. See :ref:`intro_threads` for more info"""
|
"""Used to specify what type of Facebook thread is being used. See :ref:`intro_threads` for more info"""
|
||||||
USER = 1
|
USER = 1
|
||||||
|
Reference in New Issue
Block a user