コード例 #1
0
ファイル: command.py プロジェクト: Jack1007/clubot
    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
コード例 #2
0
ファイル: command.py プロジェクト: huahu/clubot
    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
コード例 #3
0
ファイル: command.py プロジェクト: Jack1007/clubot
 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)
コード例 #4
0
ファイル: clubot.py プロジェクト: Jack1007/clubot
 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
コード例 #5
0
ファイル: clubot.py プロジェクト: huahu/clubot
 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
コード例 #6
0
ファイル: command.py プロジェクト: huahu/clubot
 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)
コード例 #7
0
    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]
コード例 #8
0
ファイル: message.py プロジェクト: Jack1007/clubot
    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]
コード例 #9
0
ファイル: command.py プロジェクト: huahu/clubot
        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))
コード例 #10
0
ファイル: command.py プロジェクト: Jack1007/clubot
        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))
コード例 #11
0
ファイル: clubot.py プロジェクト: huahu/clubot
 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]
コード例 #12
0
ファイル: clubot.py プロジェクト: Jack1007/clubot
 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]
コード例 #13
0
ファイル: command.py プロジェクト: Jack1007/clubot
 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'昵称已存在')
コード例 #14
0
ファイル: command.py プロジェクト: Jack1007/clubot
 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)
コード例 #15
0
ファイル: command.py プロジェクト: huahu/clubot
 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'昵称已存在')
コード例 #16
0
ファイル: command.py プロジェクト: ParallelBase/clubot
 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)
コード例 #17
0
ファイル: command.py プロジェクト: huahu/clubot
 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)
コード例 #18
0
 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)
コード例 #19
0
ファイル: message.py プロジェクト: Jack1007/clubot
 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)
コード例 #20
0
 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)
コード例 #21
0
ファイル: command.py プロジェクト: huahu/clubot
 def me(self, stanza, *args):
     """ 查看自己的详细信息 """
     self.whois(stanza, Logics.get_one(stanza.from_jid).nick)
コード例 #22
0
ファイル: command.py プロジェクト: Jack1007/clubot
 def me(self, stanza, *args):
     """ 查看自己的详细信息 """
     self.whois(stanza, Logics.get_one(stanza.from_jid).nick)