st_request_in_process.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import json
  2. import requests
  3. import config
  4. from BotClass import JabberBot
  5. import hashlib
  6. from datetime import datetime
  7. import time
  8. import threading
  9. import jsonAndRequest as jsreq
  10. global ticketlist
  11. botname = "st_request_in_process"
  12. JID = botname + "@" + config.JSERVER
  13. PORT = config.PORT
  14. PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest()
  15. listen_to = ["st_request_wontfix@ej.sharix-app.org"]
  16. proceed_to = ["numbers"]
  17. # Новые параметры
  18. IS_INFINITE_REMINDER = False
  19. DEFAULT_REMINDER_INTERVAL = 30 * 60 # 30 минут в секундах
  20. MAX_REMINDERS = 3 # Максимальное количество напоминаний
  21. DEFAULT_CHECK_INTERVAL = 5 * 60 # Проверка тикетов каждые 5 минут
  22. # Параметры для тестирования
  23. # MAX_REMINDERS = 2
  24. # DEFAULT_REMINDER_INTERVAL = 5
  25. # DEFAULT_CHECK_INTERVAL = 7
  26. tickets_nt = {}
  27. def send_reminder_notification(user, ticket):
  28. message = f"Напоминание: необходимо принять решение по тикету {ticket.id}"
  29. bot.send_notification("st_request_in_process@ej.sharix-app.org", message)
  30. print(f"Отправлено напоминание пользователю {user} о тикете {ticket.id}")
  31. def send_wontfix_notification(user, ticket):
  32. message = f"Уведомление: тикет {ticket.id} был отмечен как WONTFIX из-за отсутствия действий"
  33. bot.send_notification("st_request_in_process@ej.sharix-app.org", message)
  34. print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}")
  35. def ticket_worker(ticket, start_time):
  36. if ticket.id not in tickets_nt:
  37. tickets_nt[ticket.id] = {
  38. "reminders": 0,
  39. "last_date_reminder": start_time
  40. }
  41. dtime_notification = start_time - tickets_nt[ticket.id]["last_date_reminder"]
  42. if dtime_notification.seconds > DEFAULT_REMINDER_INTERVAL:
  43. tickets_nt[ticket.id]["reminders"] += 1
  44. tickets_nt[ticket.id]["last_date_reminder"] = start_time
  45. if IS_INFINITE_REMINDER or tickets_nt[ticket.id]['reminders'] <= MAX_REMINDERS:
  46. send_reminder_notification("TEST_USER", ticket)
  47. else:
  48. del tickets_nt[ticket.id]
  49. jsreq.requestPatchTicketUser(token, config.API_URL+f"tickets/api/ticket/{ticket.id}/status", { "status": 149 })
  50. send_wontfix_notification("TEST_USER", ticket)
  51. def ticket_list_worker(ticket_list, start_time):
  52. tickets=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket_list.id}")
  53. for ticket in tickets:
  54. if ticket.status == 131:
  55. ticket_worker(ticket, start_time)
  56. def status_changer():
  57. while True:
  58. ticket_lists = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/")
  59. for ticket_list in ticket_lists:
  60. start_time = datetime.now()
  61. # bot.bot_log(f"{botname} {start_time.strftime('%Y-%m-%d')} Тикет {ticketlist.id} в обработке\n")
  62. t1 = threading.Thread(target=ticket_list_worker, args=(ticket_list, start_time))
  63. t1.start()
  64. t1.join() # Ожидаем завершения обработки тикета
  65. time.sleep(DEFAULT_CHECK_INTERVAL)
  66. # Инициализация и запуск бота
  67. token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/")
  68. bot = JabberBot(JID, PASSWORD, PORT)
  69. bot.start(status_changer)