import json import requests import config import hashlib from datetime import datetime import time import threading import jsonAndRequest as jsreq global ticketlist botname = "st_request_wontfix" 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"] # Новые параметры INFINITE_TIMEOUT = -1 # Бесконечный таймаут DEFAULT_REMINDER_INTERVAL = 30 * 60 # 30 минут в секундах MAX_REMINDERS = 3 # Максимальное количество напоминаний def send_reminder(user, ticket): message = f"Напоминание: необходимо принять решение по тикету {ticket.id}" # Здесь должен быть код для отправки сообщения пользователю 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, timeout, reminder_interval): start_time = datetime.now() reminders_sent = 0 while True: current_time = datetime.now() time_in_progress = (current_time - start_time).total_seconds() if timeout != INFINITE_TIMEOUT and time_in_progress > timeout: # Превышен таймаут, меняем статус на WONTFIX jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/", {"status": "WONTFIX"}) send_wontfix_notification(ticket.assigned_to, ticket) break if time_in_progress >= (reminders_sent + 1) * reminder_interval: send_reminder(ticket.assigned_to, ticket) reminders_sent += 1 if reminders_sent >= MAX_REMINDERS: # Превышено максимальное количество напоминаний jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/", {"status": "WONTFIX"}) send_wontfix_notification(ticket.assigned_to, ticket) break # Проверяем, не изменился ли статус тикета updated_ticket_list = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/") if updated_ticket_list and updated_ticket_list[0].status != "IN PROCESS": break time.sleep(60) # Проверяем каждую минуту def status_changer(): while True: ticketlist = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/") for ticket in ticketlist: if ticket.status == "IN PROCESS": bot.bot_log(f"{botname} {datetime.now().strftime('%Y-%m-%d')} Тикет {ticket.id} в обработке\n") t1 = threading.Thread(target=process_in_progress_ticket, args=(ticket, INFINITE_TIMEOUT, DEFAULT_REMINDER_INTERVAL)) t1.start() time.sleep(300) # Обновляем ticketlist каждые 5 минут # Инициализация и запуск бота token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/") bot = JabberBot(JID, PASSWORD, PORT) bot.start(status_changer)