Example #1
0
 def push(self):
     if self.user_id != cfg['developer']:
         return cfg['公告']['內容']
     if self.value is None:
         return '參數錯誤\n[公告=對象id or all=內容]'
     if self.key == 'all':
         for g in Group.query.all():
             MessageQueue.add(
                 g.id, '<愛醬公告 %s>\n詳細說明 goo.gl/KutKhs\n%s' %
                 (datetime.now().strftime('%m%d.%H'), self.value))
     else:
         MessageQueue.add(self.key, '<開發者回覆>\n' + self.value)
     return 'ok'
Example #2
0
    def push(self, to, messages, reply_token=None, format=True):
        if type(messages) != list:
            messages = [messages]

        messages = MessageQueue.get(to, messages)

        if len(messages) == 0:
            return False

        error = None

        #reply by token
        if reply_token:
            content = self.__message_format(messages, format=format)
            for i in range(3):
                try:
                    self.reply_message(reply_token, content)
                    return True
                except Exception as e:
                    sleep(1)
            else:
                app.logger.warning('傳送失敗 to=%s messages=%s' % (to, content))
                return False

        #push
        elif self.can_push:
            while len(messages) > 0:
                content = self.__message_format(messages.pop(0), format=format)
                for i in range(3):
                    try:
                        self.push_message(to, content)
                        break
                    except Exception as e:
                        sleep(1)
                else:
                    app.logger.warning('傳送失敗 to=%s messages=%s' %
                                       (to, messages))
            return True

        #queue
        #self.__message_queue(to, messages)

        return False
Example #3
0
    def run2(self):
        '''
            接收發送訊息邏輯
        '''
        if self.message:
            uid = '%s%s' % (self.user_id[1:5]
                            if self.user_id else self.user_id,
                            '@%s' % self.group_id if self.group else '')
            logger.info('%s > %s' % (uid, self.message))

            t0 = time()
            reply_message = self.index()
            t1 = time() - t0

            #公告
            if reply_message is None:
                reply_message = []
            elif type(reply_message) == str:
                reply_message = [reply_message]

            if not self.bot:
                if self.group:
                    for message in reply_message:
                        MessageQueue.add(self.group.id, message)
            else:
                if self.bot.push(self.group.id if self.group else self.user.id,
                                 reply_message,
                                 reply_token=self.reply_token):
                    t2 = time() - t1 - t0
                    logger.info('%s < %s %s' %
                                (uid, reply_message, '(%dms, %dms)' %
                                 (t1 * 1000, t2 * 1000)))

        elif self.sticker:
            reply_message = []
            self._count({'貼圖': 1})

        elif self.image:
            reply_message = []
            self._count({'圖片': 1})

            if not self.group:
                try:
                    content = imgur.uploadByLine(self.bot, self.message_id)
                except Exception as e:
                    content = str(e)
                self.bot.push(self.user.id,
                              content,
                              reply_token=self.reply_token,
                              format=False)

        #刷新資料
        if self.user:
            try:
                self.user.name = self.bot.get_group_member_profile(
                    self.group.id, self.user.id).display_name
            except:
                try:
                    self.user.name = self.bot.get_room_member_profile(
                        self.group.id, self.user.id).display_name
                except:
                    pass
            self.user.update()
        if self.group:
            self.group.update()
            self.group_data.update()
        db.session.commit()

        return reply_message
Example #4
0
 def __message_queue(self, to, messages):
     print(messages)
     for message in messages:
         row = MessageQueue(to, message)
         db.session.add(row)