def _run_cmd(self, stanza, body): """ 执行命令 """ cmd = body[1:] c, args = self._parse_args(cmd) email = get_email(stanza.from_jid) cmds = [v.get('name') for v in self._get_cmd()] cmds.append('_ping') cmds.append('_tq') if c not in cmds: self._message_bus.send_all_msg(stanza, body) return try: self._logger.info('%s run cmd %s', email, c) m =getattr(self, c)(stanza, *args) except Exception as e: self._logger.warning(e.message) nick = Logics.get_one(stanza.from_jid).nick errorinfo = traceback.format_exc() body = u'{0} run command {1} happend an error:\ {2}'.format(nick, c, errorinfo) self._message_bus.send_to_admin(stanza, body) self._message_bus.send_back_msg(stanza, c + ' 命令异常,已通知管理员') return return m
def _run_cmd(self, stanza, body): """ 执行命令 """ cmd = body[1:] c, args = self._parse_args(cmd) email = get_email(stanza.from_jid) cmds = [v.get('name') for v in self._get_cmd()] cmds.append('_ping') cmds.append('_tq') if c not in cmds: self._message_bus.send_all_msg(stanza, body) return try: self._logger.info('%s run cmd %s', email, c) m = getattr(self, c)(stanza, *args) except Exception as e: self._logger.warning(e.message) nick = Logics.get_one(stanza.from_jid).nick errorinfo = traceback.format_exc() body = u'{0} run command {1} happend an error:\ {2}'.format(nick, c, errorinfo) self._message_bus.send_to_admin(stanza, body) self._message_bus.send_back_msg(stanza, c + ' 命令异常,已通知管理员') return return m
def r(self,stanza,*args): """20面骰子,使用:1d20+1 攻击 @submit by:欧剃 @add by: eleven.i386""" nick = Logics.get_one(stanza.from_jid).nick try: result = roll(' '.join(args)) body = ">>> {0} {1}".format(nick, result) self._message_bus.send_sys_msg(stanza, body) except: body = u'请发送: -roll 1d20+n A (n是数字 A是动作比如攻击)' self._send_cmd_result(stanza, body)
def handle_presence_unsubscribe(self, stanza): self.logger.info(u"{0} canceled presence subscription" .format(stanza.from_jid)) presence = Presence(to_jid = stanza.from_jid.bare(), stanza_type = "unsubscribe") nick = Logics.get_one(stanza.from_jid).nick self.message_bus.send_sys_msg(stanza, u'{0} 离开群'.format(nick)) Logics.drop(stanza.from_jid.bare()) r =[stanza.make_accept_response(), presence] return r
def handle_presence_unsubscribe(self, stanza): self.logger.info(u"{0} canceled presence subscription".format( stanza.from_jid)) presence = Presence(to_jid=stanza.from_jid.bare(), stanza_type="unsubscribe") nick = Logics.get_one(stanza.from_jid).nick self.message_bus.send_sys_msg(stanza, u'{0} 离开群'.format(nick)) Logics.drop(stanza.from_jid.bare()) r = [stanza.make_accept_response(), presence] return r
def r(self, stanza, *args): """20面骰子,使用:1d20+1 攻击 @submit by:欧剃 @add by: eleven.i386""" nick = Logics.get_one(stanza.from_jid).nick try: result = roll(' '.join(args)) body = ">>> {0} {1}".format(nick, result) self._message_bus.send_sys_msg(stanza, body) except: body = u'请发送: -roll 1d20+n A (n是数字 A是动作比如攻击)' self._send_cmd_result(stanza, 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 read_shell(resp): result = resp.read() nick = Logics.get_one(stanza.from_jid).nick if not result: nick = "{0}:[OK]".format(nick) else: nick = "{0}:[OUT]".format(nick) if len(result) > 200: callback = partial(self._message_bus.send_sys_msg, stanza) self._paste(stanza, "python", result, nick, callback) else: self._message_bus.send_sys_msg(stanza, u"{0} {1}".format(nick, result))
def read_shell(resp): result = resp.read() nick = Logics.get_one(stanza.from_jid).nick if not result: nick = "{0}:[OK]".format(nick) else: nick = "{0}:[OUT]".format(nick) if len(result) > 200: callback = partial(self._message_bus.send_sys_msg, stanza) self._paste(stanza, "python", result, nick, callback) else: self._message_bus.send_sys_msg(stanza, u"{0} {1}" .format(nick, result))
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 nick(self, stanza, *args): """更改昵称 eg. -nick yournewnickname""" if len(args) < 1: return self.help(stanza, 'nick') nick = ' '.join(args[0:]) frm = stanza.from_jid oldnick = Logics.get_one(frm).nick if nick == oldnick: self._send_cmd_result(stanza, u"你已经在使用这个昵称") return r = Logics.modify_nick(frm, nick) if r: body = "%s 更改昵称为 %s" % (oldnick, nick) self._message_bus.send_sys_msg(stanza, body) self._send_cmd_result(stanza, u'你的昵称现在的已经已经更改为 {0}'.format(nick)) else: self._send_cmd_result(stanza, u'昵称已存在')
def rp(self, stanza, *args): """ 测试今日RP """ frm = stanza.from_jid nick = Logics.get_one(frm).nick rp = Logics.get_today_rp(frm) if not rp: t = random.randrange(1, 10) rps = [random.randrange(0, 100) for i in xrange(0, t)] rp = rps[random.randrange(0, len(rps) -1)] if len(rps) > 1 else rps[0] Logics.set_info(frm, "rp", rp) Logics.set_info(frm, "rp_date", time.time()) body = ">>>{0} 进行了今日人品检测,人品值为 {1}".format(nick, rp) self._message_bus.send_sys_msg(stanza, body) else: body = "你已经检测过了今天的人品,人品值为 {0}".format(rp) self._send_cmd_result(stanza, body)
def rp(self, stanza, *args): """ 测试今日RP """ frm = stanza.from_jid nick = Logics.get_one(frm).nick rp = Logics.get_today_rp(frm) if rp == None: t = random.randrange(1, 10) rps = [random.randrange(0, 100) for i in xrange(0, t)] rp = rps[random.randrange(0, len(rps) -1)] if len(rps) > 1 else rps[0] Logics.set_today_rp(frm, rp) body = ">>>{0} 进行了今日人品检测,人品值为 {1}".format(nick, rp) self._message_bus.send_sys_msg(stanza, body) self._honor.rp_honor(nick, rp, partial(self._message_bus.send_sys_msg, stanza)) else: body = "你已经检测过了今天的人品,人品值为 {0}".format(rp) self._send_cmd_result(stanza, body)
def rp(self, stanza, *args): """ 测试今日RP """ frm = stanza.from_jid nick = Logics.get_one(frm).nick rp = Logics.get_today_rp(frm) if not rp: t = random.randrange(1, 10) rps = [random.randrange(0, 100) for i in xrange(0, t)] rp = rps[random.randrange(0, len(rps) - 1)] if len(rps) > 1 else rps[0] Logics.set_info(frm, "rp", rp) Logics.set_info(frm, "rp_date", time.time()) body = ">>>{0} 进行了今日人品检测,人品值为 {1}".format(nick, rp) self._message_bus.send_sys_msg(stanza, body) else: body = "你已经检测过了今天的人品,人品值为 {0}".format(rp) self._send_cmd_result(stanza, body)
def rp(self, stanza, *args): """ 测试今日RP """ frm = stanza.from_jid nick = Logics.get_one(frm).nick rp = Logics.get_today_rp(frm) if rp == None: t = random.randrange(1, 10) rps = [random.randrange(0, 100) for i in xrange(0, t)] rp = rps[random.randrange(0, len(rps) - 1)] if len(rps) > 1 else rps[0] Logics.set_today_rp(frm, rp) body = ">>>{0} 进行了今日人品检测,人品值为 {1}".format(nick, rp) self._message_bus.send_sys_msg(stanza, body) self._honor.rp_honor( nick, rp, partial(self._message_bus.send_sys_msg, stanza)) else: body = "你已经检测过了今天的人品,人品值为 {0}".format(rp) self._send_cmd_result(stanza, body)
def send_private_msg(self, stanza, to, body): """ 发送私信 """ frm = stanza.from_jid nick = Logics.get_one(frm).nick body = "[%s 悄悄对你说] %s" % (nick, body) self.send_message(stanza, to, body, True)
def me(self, stanza, *args): """ 查看自己的详细信息 """ self.whois(stanza, Logics.get_one(stanza.from_jid).nick)