68 lines
1.5 KiB
Python
68 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import, unicode_literals
|
|
import six
|
|
|
|
from wechatpy import replies
|
|
from wechatpy.fields import IntegerField
|
|
|
|
|
|
REPLY_TYPES = {}
|
|
|
|
|
|
def register_reply(reply_type):
|
|
def register(cls):
|
|
REPLY_TYPES[reply_type] = cls
|
|
return cls
|
|
return register
|
|
|
|
|
|
@register_reply('text')
|
|
class TextReply(replies.TextReply):
|
|
agent = IntegerField('AgentID', 0)
|
|
|
|
|
|
@register_reply('image')
|
|
class ImageReply(replies.ImageReply):
|
|
agent = IntegerField('AgentID', 0)
|
|
|
|
|
|
@register_reply('voice')
|
|
class VoiceReply(replies.VoiceReply):
|
|
agent = IntegerField('AgentID', 0)
|
|
|
|
|
|
@register_reply('video')
|
|
class VideoReply(replies.VideoReply):
|
|
agent = IntegerField('AgentID', 0)
|
|
|
|
|
|
@register_reply('news')
|
|
class ArticlesReply(replies.ArticlesReply):
|
|
agent = IntegerField('AgentID', 0)
|
|
|
|
|
|
def create_reply(reply, message=None, render=False):
|
|
r = None
|
|
if isinstance(reply, replies.BaseReply):
|
|
r = reply
|
|
if message:
|
|
r.source = message.target
|
|
r.target = message.source
|
|
r.agent = message.agent
|
|
elif isinstance(reply, six.string_types):
|
|
r = TextReply(
|
|
message=message,
|
|
content=reply
|
|
)
|
|
elif isinstance(reply, (tuple, list)):
|
|
if len(reply) > 10:
|
|
raise AttributeError("Can't add more than 10 articles"
|
|
" in an ArticlesReply")
|
|
r = ArticlesReply(
|
|
message=message,
|
|
articles=reply
|
|
)
|
|
if r and render:
|
|
return r.render()
|
|
return r
|