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'
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
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
def __message_queue(self, to, messages): print(messages) for message in messages: row = MessageQueue(to, message) db.session.add(row)