コード例 #1
0
ファイル: message.py プロジェクト: Jack1007/clubot
 def send_message(self, stanza, to, body, log = False):
     """ 发送消息
         `stanza`   - 消息节
         `to`       - 接收人 接收人不在线发送离线消息
         `body`     - 消息主体
         `log`      - 记录历史消息
     """
     if to == USER:
         return
     if log:
         Logics.add_history(stanza.from_jid, to, body)
     if Logics.is_online(to):
         mode = Logics.get_info(to, 'mode').value
         if mode == 'talk' or not mode:
             if isinstance(to, (str, unicode)):
                 to = JID(to)
             self.logger.debug("send '{0}' to {1!r}".format(body, to))
             typ = stanza.stanza_type
             self._stream.send(self.make_message(to, typ, body))
     else:
         body = NOW() + ' ' + body
         self.logger.debug("store offline message'{0}' for {1!r}"
                                 .format(body, to))
         offline_message = Logics.get_info(to, 'offline_message', '').value
         off_msgs = offline_message.split(self.offline_split_symbol)
         if len(off_msgs) >= 10:
             offline_message = self.offline_split_symbol.join(off_msgs[-9:])
         offline_message += self.offline_split_symbol +  body
         Logics.set_info(to, 'offline_message', offline_message)
コード例 #2
0
 def send_message(self, stanza, to, body, log=False):
     """ 发送消息
         `stanza`   - 消息节
         `to`       - 接收人 接收人不在线发送离线消息
         `body`     - 消息主体
         `log`      - 记录历史消息
     """
     if to == USER:
         return
     if log:
         Logics.add_history(stanza.from_jid, to, body)
     if Logics.is_online(to):
         mode = Logics.get_info(to, 'mode').value
         if mode == 'talk' or not mode:
             if isinstance(to, (str, unicode)):
                 to = JID(to)
             self.logger.debug("send '{0}' to {1!r}".format(body, to))
             typ = stanza.stanza_type
             self._stream.send(self.make_message(to, typ, body))
     else:
         body = NOW() + ' ' + body
         self.logger.debug("store offline message'{0}' for {1!r}".format(
             body, to))
         offline_message = Logics.get_info(to, 'offline_message', '').value
         off_msgs = offline_message.split(self.offline_split_symbol)
         if len(off_msgs) >= 10:
             offline_message = self.offline_split_symbol.join(off_msgs[-9:])
         offline_message += self.offline_split_symbol + body
         Logics.set_info(to, 'offline_message', offline_message)
コード例 #3
0
ファイル: message.py プロジェクト: Jack1007/clubot
 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]
コード例 #4
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]
コード例 #5
0
 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
     ]
コード例 #6
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]