import json import requests import config from BotClass import JabberBot import hashlib from datetime import datetime import time import threading import jsonAndRequest as jsreq global ticketlist botname = "st_request_in_process" JID = botname + "@" + config.JSERVER PORT = config.PORT PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest() listen_to = ["st_request_wontfix@ej.sharix-app.org"] proceed_to = ["numbers"] # Новые параметры IS_INFINITE_REMINDER = False DEFAULT_REMINDER_INTERVAL = 30 * 60 # 30 минут в секундах MAX_REMINDERS = 3 # Максимальное количество напоминаний DEFAULT_CHECK_INTERVAL = 5 * 60 # Проверка тикетов каждые 5 минут tickets = {} def send_reminder(user, ticket): message = f"Напоминание: необходимо принять решение по тикету {ticket.id}" # Здесь должен быть код для отправки сообщения пользователю bot.send_notification("st_request_in_process@ej.sharix-app.org", "message") print(f"Отправлено напоминание пользователю {user} о тикете {ticket.id}") # def send_wontfix_notification(user, ticket): # message = f"Уведомление: тикет {ticket.id} был отмечен как WONTFIX из-за отсутствия действий" # # Здесь должен быть код для отправки сообщения пользователю # print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}") def process_in_progress_ticket(ticket, max_reminders, default_reminder_interval, is_infinite_reminder, start_time): bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет в обработчике\n") tickets_new=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket.id}") if tickets_new: if not ticket.id in tickets: tickets[ticket.id] = {} for ticket_new in tickets_new: if ticket_new.id in tickets[ticket.id]: tickets[ticket.id][ticket_new.id] = { "reminders": 0, "last_date_reminder": start_time } if is_infinite_reminder or tickets[ticket.id][ticket_new.id]['reminders'] < max_reminders: if (start_time - tickets[ticket.id][ticket_new.id]["last_date_reminder"]) > default_reminder_interval: send_reminder("st_request_in_process@ej.sharix-app.org", ticket_new) tickets[ticket.id][ticket_new.id]["reminders"] += 1 tickets[ticket.id][ticket_new.id]["last_date_reminder"] += start_time elif not is_infinite_reminder and tickets[ticket.id][ticket_new.id]['reminders'] >= max_reminders: del tickets[ticket.id][ticket_new.id] # Функция смены статуса на WONTFIX def status_changer(): while True: ticketlist = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/") for ticket in ticketlist: bot.bot_log(f"{botname} {datetime.now().strftime('%Y-%m-%d')} Тикет {ticket.id} в обработке\n") start_time = datetime.now() t1 = threading.Thread(target=process_in_progress_ticket, args=(ticket, MAX_REMINDERS, DEFAULT_REMINDER_INTERVAL, IS_INFINITE_REMINDER, start_time)) t1.start() t1.join() # Ожидаем завершения обработки тикета time.sleep(DEFAULT_CHECK_INTERVAL) # Инициализация и запуск бота token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/") bot = JabberBot(JID, PASSWORD, PORT) bot.start(status_changer)