1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # -*- 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
|