def ls(self, stanza, *args): """列出成员""" frm = stanza.from_jid femail = get_email(frm) members = Logics.get_members() onlines = [] offlines = [] for m in members: if m.email == USER: continue status = m.status isonline = bool([status.status for status in m.status if status.status]) status_text = " ".join(status.statustext for status in m.status if status.statustext) if m.email == femail: onlines.append("** {0}".format(m.nick)) elif m.email != femail and isonline: onlines.append("* {0} {1}".format(m.nick, status_text)) else: offlines.append(" {0}".format(m.nick)) onlines = sorted(onlines, key = lambda k:k.decode('utf-8')[1], reverse=True) offlines = sorted(offlines, key = lambda k:k.decode('utf-8')[1], reverse=True) body = [] body.insert(0, 'Pythoner Club 所有成员(** 表示你自己, * 表示在线):') body.extend(onlines) body.extend(offlines) online_num = len(onlines) total = online_num + len(offlines) body.append('共列出 {0} 位成员 {1} 位在线'.format(total, online_num)) self._send_cmd_result(stanza, '\n'.join(body))
def ls(self, stanza, *args): """列出成员""" frm = stanza.from_jid femail = get_email(frm) members = Logics.get_members() onlines = [] offlines = [] for m in members: if m.email == USER: continue status = m.status isonline = bool( [status.status for status in m.status if status.status]) status_text = " ".join(status.statustext for status in m.status if status.statustext) if m.email == femail: onlines.append("** {0}".format(m.nick)) elif m.email != femail and isonline: onlines.append("* {0} {1}".format(m.nick, status_text)) else: offlines.append(" {0}".format(m.nick)) onlines = sorted(onlines, key=lambda k: k.decode('utf-8')[1], reverse=True) offlines = sorted(offlines, key=lambda k: k.decode('utf-8')[1], reverse=True) body = [] body.insert(0, 'Pythoner Club 所有成员(** 表示你自己, * 表示在线):') body.extend(onlines) body.extend(offlines) online_num = len(onlines) total = online_num + len(offlines) body.append('共列出 {0} 位成员 {1} 位在线'.format(total, online_num)) self._send_cmd_result(stanza, '\n'.join(body))
def send_all_msg(self, stanza, body): """ 给除了自己的所有成员发送消息 """ nick = Logics.get_one(stanza.from_jid).nick if stanza.from_jid.bare().as_string() == USER: return if cityid(body.strip()): return self.send_command(stanza, '-_tq ' + body.strip()) if body.strip() == 'help': return self.send_command(stanza, '-help') if body.strip() == 'ping': return self.send_command(stanza, '-_ping') if body.startswith("```"): back = partial(self.send_back_msg, stanza) self.handle_code(stanza, body, nick, back) mode = Logics.get_info(stanza.from_jid, 'mode').value if mode == 'quiet': body = u'你处于{0},请使用-cd命令切换到 {1} '\ u'后发言'.format(MODES[mode], MODES['talk']) return self.send_back_msg(stanza, body) if body.startswith(">>>"): self.cmd_handler.shell(stanza, body.lstrip(">").lstrip()) members = Logics.get_members(stanza.from_jid) members = [m.email for m in members] if len(body) > 200: def long_back(body, content): nick, url = content.split(" ") body = u"{0}\n{1}".format(url, body.split("\n")[0][0:50]) self.send_back_msg(stanza, u"内容过长,贴到:{0}".format(url)) self.logger.info("{0} send message {1} to {2!r}".format( stanza.from_jid, body, members)) Logics.add_history(stanza.from_jid, 'all', body) [ self.send_message(stanza, m, "[{0}] {1}".format(nick, body)) for m in members ] back = partial(long_back, body) self.handle_code(stanza, "```\n" + body, nick, back) return Logics.add_history(stanza.from_jid, 'all', body) self.logger.info("{0} send message {1} to {2!r}".format( stanza.from_jid, body, members)) if body.startswith('/me'): body = body.replace('/me', nick + ' ') else: if nick != "qxbot": body = "[{0}] {1}".format(nick, body) [self.send_message(stanza, m, body) for m in members]
def send_all_msg(self, stanza, body): """ 给除了自己的所有成员发送消息 """ nick = Logics.get_one(stanza.from_jid).nick if stanza.from_jid.bare().as_string() == USER: return if cityid(body.strip()): return self.send_command(stanza, '-_tq ' + body.strip()) if body.strip() == 'help': return self.send_command(stanza, '-help') if body.strip() == 'ping': return self.send_command(stanza, '-_ping') if body.startswith("```"): back = partial(self.send_back_msg, stanza) self.handle_code(stanza, body, nick, back) mode = Logics.get_info(stanza.from_jid, 'mode').value if mode == 'quiet': body = u'你处于{0},请使用-cd命令切换到 {1} '\ u'后发言'.format(MODES[mode], MODES['talk']) return self.send_back_msg(stanza, body) if body.startswith(">>>"): self.cmd_handler.shell(stanza, body.lstrip(">").lstrip()) members = Logics.get_members(stanza.from_jid) members = [m.email for m in members] if len(body) > 200: def long_back(body, content): nick, url = content.split(" ") body = u"{0}\n{1}".format(url, body.split("\n")[0][0:50]) self.send_back_msg(stanza, u"内容过长,贴到:{0}".format(url)) self.logger.info("{0} send message {1} to {2!r}" .format(stanza.from_jid, body, members)) Logics.add_history(stanza.from_jid, 'all', body) [self.send_message(stanza, m, "[{0}] {1}".format(nick, body)) for m in members] back = partial(long_back, body) self.handle_code(stanza, "```\n" + body, nick, back) return Logics.add_history(stanza.from_jid, 'all', body) self.logger.info("{0} send message {1} to {2!r}" .format(stanza.from_jid, body, members)) if body.startswith('/me'): body = body.replace('/me', nick + ' ') else: if nick != "qxbot": body = "[{0}] {1}".format(nick, body) [self.send_message(stanza, m, body) for m in members]
def handle_roster_received(self, event): dbstatus = Logics.get_global_info('status').value if not dbstatus: status = STATUS else: status = dbstatus p = Presence(status=status) self.client.stream.send(p) ret = [x.jid.bare() for x in self.roster if x.subscription == 'both'] self.logger.info(' -- roster:{0}'.format(ret)) members = Logics.get_members() members = [m.email for m in members] [Logics.add(frm) for frm in ret if not Logics.get_one(frm)] if IMPORT: [self.invite_member(JID(m)) for m in members if JID(m) not in ret]
def send_sys_msg(self, stanza, body): """ 发送系统消息 """ members = Logics.get_members() members = [m.email for m in members] [self.send_message(stanza, m, body) for m in members]