コード例 #1
0
ファイル: command.py プロジェクト: Jack1007/clubot
 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))
コード例 #2
0
ファイル: command.py プロジェクト: huahu/clubot
 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))
コード例 #3
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]
コード例 #4
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]
コード例 #5
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]
コード例 #6
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]
コード例 #7
0
ファイル: message.py プロジェクト: Jack1007/clubot
 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]
コード例 #8
0
 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]