def mv(self, stanza, *args): """ 移动用户到指定频道 """ if len(args) < 2: body = u"Usage: -mv NICK CHANNLE" return self._send_cmd_result(stanza, body) if args[1] == ".": distch = get_info("channel", stanza.from_jid) else: distch = args[1] if args[0] == "*": members = get_members(stanza.from_jid) emails = [v for v in members if get_info("channel", v) != distch] else: info = get_member(nick=args[0]) emails = [info.get("email")] channel = get_channel(distch) if not emails: body = u"{0} 成员不存在".format(args[0]) return self._send_cmd_result(stanza, body) if not channel: body = u"{0} 频道不存在".format(args[1]) return self._send_cmd_result(stanza, body) nick = get_nick(stanza.from_jid) body = "{0} 将你移动到 {1} 频道".format(nick, distch) nicks = [] for email in emails: nicks.append(get_nick(email)) self._switch_channel(email, distch) self._message_bus.send_message(stanza, email, body) body = "你将 {0} 移动到 {1} 频道".format(",".join(nicks), distch) self._send_cmd_result(stanza, body)
def rm(self, stanza, *args): """剔除用户""" # XXX 没有效果 emails = [get_member(nick=n) for n in args] if len(emails) < 1: return self.help(stanza, "rm") for e in emails: jid = JID(e) del_member(jid) self._message_bus.send_unsubscribe(jid)
def handle_roster_received(self, event): dbstatus = get_global_info('status') 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 = [m for m in get_members()] [add_member(frm) for frm in ret if not get_member(frm)] if IMPORT: [self.invite_member(JID(m)) for m in members if JID(m) not in ret]
def mt(self, stanza, *args): """单独给某用户发消息""" if len(args) <= 1: return self.help(stanza, "msgto") nick = args[0] receiver = get_member(nick=nick).get("email") if receiver == stanza.from_jid.bare().as_string(): self._send_cmd_result(stanza, "请不要自言自语") return body = " ".join(args[1:]) if not receiver: self._send_cmd_result(stanza, "%s 用户不存在" % nick) else: self._message_bus.send_private_msg(stanza, receiver, body)
def _show_nicks(self, stanza, nicks): """ 显示所有昵称的信息 """ emails = [get_member(nick=n) for n in nicks] infos = [self._whois(e.get("email")) for e in emails] body = "\n\n".join(infos) self._send_cmd_result(stanza, body)