12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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)
|