wechat_sender.objects 源代码

# coding: utf-8
from __future__ import unicode_literals

import json


[文档]class WxBot(object): """ 储存微信 bot 相关信息及 wechat_sender 各类 receiver 的类 """ def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): orig = super(WxBot, cls) cls._instance = orig.__new__(cls) return cls._instance
[文档] def __init__(self, bot=None, receivers=None, status_receiver=None, *args, **kwargs): """ :param bot: wxpy bot 对象实例 :param receivers: wxpy chat 对象实例 :param status_receiver: wxpy chat 对象实例 """ self.bot = bot self.receivers = {} self.default_receiver = None self.init_receivers(receivers) self.status_receiver = status_receiver if status_receiver else self.default_receiver self.receivers['status'] = self.status_receiver super(WxBot, self).__init__(*args, **kwargs)
def init_receivers(self, receivers): """ 初始化 receivers """ if not receivers: self.default_receiver = self.bot.file_helper return True if isinstance(receivers, list): self.default_receiver = receivers[0] for receiver in receivers: if self.bot.puid_map: self.receivers[receiver.puid] = receiver self.receivers[receiver.name] = receiver else: self.default_receiver = receivers if self.bot.puid_map: self.receivers[receivers.puid] = receivers self.receivers[receivers.name] = receivers def send_msg(self, msg): """ wxpy 发送文本消息的基本封装,这里会进行消息 receiver 识别分发 """ for receiver in msg.receivers: current_receiver = self.receivers.get(receiver, self.default_receiver) current_receiver.send_msg(msg)
[文档]class Message(object): """ wechat_sender 消息类,是所有 wechat_sender 发送消息的基本类型 """
[文档] def __init__(self, content, title=None, time=None, remind=None, interval=None, receivers=None): """ :param content: 消息内容 :param title: 消息标题 :param time: 消息时间 :param remind: 消息提醒时间 :param interval: 消息提醒间隔 :param receivers: 消息接收者 """ self.title = title self.content = content self.message_time = time self.remind_time = None if time and remind: self.remind_time = time - remind self.nc = remind self.message_interval = interval self.receivers = [itm for itm in receivers.split(',')] if receivers else ['default']
@property def time(self): """ :return: 以字符串 "xxxx-xx-xx xx:xx:xx" 的形式返回消息的时间 """ return self.message_time.strftime('%Y-%m-%d %H:%M:%S') if self.message_time else None @property def interval(self): """ :return: 返回消息提醒间隔的秒数 """ return '{0}s'.format(self.message_interval.seconds) if self.message_interval else None @property def remind(self): """ :return: 以字符串 "xxxx-xx-xx xx:xx:xx" 的形式返回消息的提醒时间 """ return self.remind_time.strftime('%Y-%m-%d %H:%M:%S') if self.message_time else None def render_message(self): """ 渲染消息 :return: 渲染后的消息 """ message = None if self.title: message = '标题:{0}'.format(self.title) if self.message_time: message = '{0}\n时间:{1}'.format(message, self.time) if message: message = '{0}\n内容:{1}'.format(message, self.content) else: message = self.content return message def __repr__(self): return self.render_message()
[文档]class Global(object): """ wechat_sender 的全局对象类 """ def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): orig = super(Global, cls) cls._instance = orig.__new__(cls) return cls._instance def __init__(self, *args, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) def insert(self, name, value): setattr(self, name, value) return True def __call__(self, *args, **kwargs): return self.__dict__