def checkNewReplies(self): replied_tickets = Datebase().getRepliesTicketsIdList() if (len(activeRepTickets) != 0): try: closedTickets = { k: activeRepTickets[k] for k in activeRepTickets.keys() ^ set(replied_tickets) } for rTicket in closedTickets: self.CheckHandlerLog.info("[Ответ][%s] закрыт." % rTicket) self.openbot.sendMessageGroup("[Ответ][%s] закрыт." % rTicket) except KeyError: pass diff_ticket = { k: activeRepTickets[k] for k in activeRepTickets.keys() & set(replied_tickets) } activeRepTickets.clear() for i in diff_ticket: activeRepTickets[i] = diff_ticket[i] save_obj(activeRepTickets, 'activeRepTickets') for rTicket in replied_tickets: if rTicket not in activeRepTickets: time.sleep(0.5) for row in Datebase().getLastRepliesByTicketId(rTicket): ticket = Ticket(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10]) ticket.message = self.cleanUpMessage(ticket.message) activeRepTickets[ticket.ticket_id] = ticket save_obj(activeRepTickets, 'activeRepTickets') self.CheckHandlerLog.info( "[Reply][%s] Новый ответ.\n %s \n %s \n %s" % (ticket.ticket_id, ticket.email, ticket.subject, ticket.message)) self.openbot.sendMessageGroup( "[Reply][%s] Новый ответ.\n %s \n %s \n %s" % (ticket.ticket_id, ticket.email, ticket.subject, ticket.message), 'HTML', False)
def undefinedTicket(self, ticket): if (ticket.ticket_id not in activeTickets): activeTickets[ticket.ticket_id] = ticket ticket.message = self.cleanUpMessage(ticket.message) #append attachments to message for k, v in ticket.attachment.items(): ticket.message += "\n<a href=\"%s\">%s</a>" % (v, k) self.CheckHandlerLog.info( "[Ticket][%s] Новая Заявка.\n %s \n %s \n %s" % (ticket.ticket_id, ticket.email, ticket.subject, ticket.message)) self.openbot.sendMessageGroup( "[Ticket][%s] Новая Заявка.\n %s \n %s \n %s" % (ticket.ticket_id, ticket.email, ticket.subject, ticket.message), 'HTML', False) save_obj(activeTickets, 'activeTickets')
def getDomainTasksList(self): browser = self.getAuth() if (browser is None): return #Fix block error in dms if ('ctl00_contentHolder_TaskList_ucStop_lblActionType' in browser.response.text): self.checkBlockError(browser) else: for blockHosting in listBlockHosting: self.dLog.info( "[Domain.by] Исправлена ошибка блокировки в дмс: %s " % blockHosting.encode("utf-8").decode("idna")) self.openbot.sendMessageMe( "[Domain.by] Исправлена ошибка блокировки в дмс: %s" % blockHosting.encode("utf-8").decode("idna")) listBlockHosting.clear() save_obj(listBlockHosting, 'listBlockHosting') if ('ctl00_contentHolder_TaskList_ucUnblock_lblActionType' in browser.response.text): self.checkUnBlockError(browser) else: for unBlockHosting in listUnBlockHosting: self.dLog.info( "[Domain.by] Исправлена ошибка разблокировки в дмс: %s " % unBlockHosting.encode("utf-8").decode("idna")) self.openbot.sendMessageMe( "[Domain.by] Исправлена ошибка разблокировки в дмс: %s" % unBlockHosting.encode("utf-8").decode("idna")) listUnBlockHosting.clear() save_obj(listUnBlockHosting, 'listUnBlockHosting')
def checkNewMessage(self): tickets = self.getListTickets() emailSpamList = Datebase().getSpamEmail().split('\r\n') try: closedTickets = { k: activeTickets[k] for k in activeTickets.keys() ^ set(ticket.ticket_id for ticket in tickets) } for cTicket in closedTickets: self.CheckHandlerLog.info("[%s] закрыт." % cTicket) self.openbot.sendMessageGroup("[%s] закрыт." % cTicket) except KeyError: pass tempactiveTickets = { k: activeTickets[k] for k in activeTickets.keys() & set(ticket.ticket_id for ticket in tickets) } activeTickets.clear() for i in tempactiveTickets: activeTickets[i] = tempactiveTickets[i] save_obj(activeTickets, 'activeTickets') if not tickets: return for ticket in tickets: time.sleep(0.5) if (ticket.ticket_id in activeTickets): continue if re.match("\[s.\.open.by\] New account: \w{1,16}", ticket.subject): self.CheckHandlerLog.info("[Создание][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[Создание][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match("\[s.\.open.by\] Account Suspended: \w{1,16}", ticket.subject): self.CheckHandlerLog.info("[Блокировка][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[Блокировка][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match("\[s.\.open.by\] Account Unsuspended: \w{1,16}", ticket.subject): self.CheckHandlerLog.info("[Pазблокировка][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[Pазблокировка][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match("\[s.\.open.by\] Upgrade/Downgrade:", ticket.subject): self.CheckHandlerLog.info("[Package][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[Package][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match("Undelivered Mail Returned to Sender", ticket.subject): continue if re.match("\[s.\.open.by\] Disk Usage Warning: The user", ticket.subject): try: account = re.search( 'Disk quota notification for \“(.+?)\”\.', ticket.message).group(1) quota = re.search( 'The account currently uses (.+?) of its', ticket.message).group(1) self.CheckHandlerLog.info( "[Квота][%s] [%s] %s" % (ticket.ticket_id, account, quota)) self.openbot.sendMessageMe( "[Квота][%s] [%s] %s" % (ticket.ticket_id, account, quota)) Datebase().setTicketClose(ticket.ticket_id) except Exception as inst: self.CheckHandlerLog.critical("[DiskUsageWarning] %s" % (inst)) self.CheckHandlerLog.critical(sys.exc_info()[0]) continue if re.match( u"\<\!\-\- head not allowed \-\->Домен\: \w{1,25}(-)?(\.)?(\w{1,25})?(\.)?(\w{1,25})?(-)?(\.)?\w{1,5}(-)?(\.)?(\w{1,5})?\; Сервер\: http(s)?\:\/\/s\d\.open\.by\:2087\/json\-api\/\; Действие: Успешно заблокирован", ticket.message): self.CheckHandlerLog.info("[API block][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[API block][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match( u"\<\!\-\- head not allowed \-\->Домен\: \w{1,25}(-)?(\.)?(\w{1,25})?(\.)?(\w{1,25})?(-)?(\.)?\w{1,5}(-)?(\.)?(\w{1,5})?\; Сервер\: http(s)?\:\/\/s\d\.open\.by\:2087\/json\-api\/\; Действие: Успешно разблокирован", ticket.message): self.CheckHandlerLog.info("[API unblock][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[API unblock][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match(u"\[s.\.open.by\] Account Terminated:", ticket.subject): self.CheckHandlerLog.info("[Удаление][%s] Закрыт" % ticket.ticket_id) self.openbot.sendMessageMe("[Удаление][%s] Закрыт" % ticket.ticket_id) Datebase().setTicketClose(ticket.ticket_id) continue if re.match(u"Сведения ИРЦ РУП Белтелеком за", ticket.subject): self.CheckHandlerLog.info("[Белтелеком][%s] Задержан" % ticket.ticket_id) self.openbot.sendMessageMe("[Белтелеком][%s] Задержан" % ticket.ticket_id) Datebase().setTickethold(ticket.ticket_id) continue if (len(ticket.attachment) > 0): listKeys = list(ticket.attachment.keys()) if any(".jar" in s for s in listKeys): self.CheckHandlerLog.info("[SPAM][%s] Заблокирован" % ticket.ticket_id) self.openbot.sendMessageMe("[SPAM][%s] Заблокирован" % ticket.ticket_id) Datebase().setSpamEmail(ticket.email) Datebase().setTicketSpam(ticket.ticket_id) continue if (ticket.client_id == 101373): if (self.managerParse(ticket)): continue if (ticket.client_id == 94434): if (self.parseDomainbyTask(ticket)): continue if ticket.email in emailSpamList: self.CheckHandlerLog.info("[Spam][%s] Перемещен" % ticket.ticket_id) self.openbot.sendMessageMe("[Spam][%s] Перемещен" % ticket.ticket_id) Datebase().setTicketSpam(ticket.ticket_id) continue else: self.undefinedTicket(ticket)
def checkBlockError(self, browser): exclude_list = cfg.getExcludeDomainList() soup = BeautifulSoup(browser.response.text, "html.parser") haveValue = True i = 1 temp = [] while (haveValue): try: domain = soup.find( id= "ctl00_contentHolder_TaskList_ucStop_rptServiceList_ctl0%s_lblDomain" % i).text.replace('www.', '') status = soup.find( id= "ctl00_contentHolder_TaskList_ucStop_rptServiceList_ctl0%s_lblCpanelError" % i).text url_block = "https://domain.by/BackEnd/Support/" + soup.find( id= "ctl00_contentHolder_TaskList_ucStop_rptServiceList_ctl0%s_hlAction" % i).get('href') if (status != "Ошибка"): i += 1 continue if (re.search('[а-яА-Я]', domain)): domain = domain.encode("idna").decode("utf-8") if (domain not in listBlockHosting): self.dLog.info( "[Domain.by] Обнаружена ошибка блокировки: %s" % domain.encode("utf-8").decode("idna")) self.openbot.sendMessageGroup( "[Domain.by] Обнаружена ошибка блокировки: %s" % domain.encode("utf-8").decode("idna")) listBlockHosting.append(domain) if (len(listBlockHosting) > 0): save_obj(listBlockHosting, 'listBlockHosting') if (domain in exclude_list): self.dLog.info( "[Domain.by] [Ошибка блокировки] %s в списке исключений." % domain.encode("utf-8").decode("idna")) self.openbot.sendMessageGroup( "[Domain.by] [Ошибка блокировки] %s в списке исключений." % domain.encode("utf-8").decode("idna")) i += 1 continue browser.open(url_block) hosting = getAccountsList()[domain].server self.dLog.info( "[Domain.by] [Ошибка блокировки] Расположен на сервере: %s" % hosting) dataToPost = self._get_form_post_data(browser) dataToPost[ "ctl00$contentHolder$HostingServersList$HostingServers"] = hostingServerDmsList[ hosting] dataToPost["ctl00$contentHolder$cbCpanelSynchro"] = "on" dataToPost["ctl00$contentHolder$btnStop"] = "Блокировать" browser.open(url_block, method='post', data=dataToPost) self.dLog.info( 'Для доменного имени %s необходимо произвести смену хостинг сервера на %s' % (domain.encode("utf-8").decode("idna"), hosting)) self.openbot.sendMessageMe( "[Domain.by] [Ошибка блокировки] Для доменного имени %s необходимо произвести смену хостинг сервера на %s." % domain.encode("utf-8").decode("idna"), hosting) i += 1 except KeyError as inst: i += 1 self.dLog.critical( "[checkBlockError] %s не найден на хостинге." % domain) self.openbot.sendMessageGroup( "[checkBlockError] %s не найден на хостинге." % domain) pass except RuntimeError as inst: self.dLog.critical("[checkBlockError] %s" % inst) self.openbot.sendMessageGroup( "[Domain.by][checkBlockError][RuntimeError]: %s" % (inst)) except Exception as inst: haveValue = False