replies.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import six
  4. from wechatpy import replies
  5. from wechatpy.fields import IntegerField
  6. REPLY_TYPES = {}
  7. def register_reply(reply_type):
  8. def register(cls):
  9. REPLY_TYPES[reply_type] = cls
  10. return cls
  11. return register
  12. @register_reply('text')
  13. class TextReply(replies.TextReply):
  14. agent = IntegerField('AgentID', 0)
  15. @register_reply('image')
  16. class ImageReply(replies.ImageReply):
  17. agent = IntegerField('AgentID', 0)
  18. @register_reply('voice')
  19. class VoiceReply(replies.VoiceReply):
  20. agent = IntegerField('AgentID', 0)
  21. @register_reply('video')
  22. class VideoReply(replies.VideoReply):
  23. agent = IntegerField('AgentID', 0)
  24. @register_reply('news')
  25. class ArticlesReply(replies.ArticlesReply):
  26. agent = IntegerField('AgentID', 0)
  27. def create_reply(reply, message=None, render=False):
  28. r = None
  29. if isinstance(reply, replies.BaseReply):
  30. r = reply
  31. if message:
  32. r.source = message.target
  33. r.target = message.source
  34. r.agent = message.agent
  35. elif isinstance(reply, six.string_types):
  36. r = TextReply(
  37. message=message,
  38. content=reply
  39. )
  40. elif isinstance(reply, (tuple, list)):
  41. if len(reply) > 10:
  42. raise AttributeError("Can't add more than 10 articles"
  43. " in an ArticlesReply")
  44. r = ArticlesReply(
  45. message=message,
  46. articles=reply
  47. )
  48. if r and render:
  49. return r.render()
  50. return r