1
0

st_request_in_process.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. tickets_nt = {}
  23. def send_reminder(user, ticket):
  24. message = f"Напоминание: необходимо принять решение по тикету {ticket.id}"
  25. # Здесь должен быть код для отправки сообщения пользователю
  26. bot.send_notification("st_request_in_process@ej.sharix-app.org", message)
  27. print(f"Отправлено напоминание пользователю {user} о тикете {ticket.id}")
  28. def send_wontfix_notification(user, ticket):
  29. message = f"Уведомление: тикет {ticket.id} был отмечен как WONTFIX из-за отсутствия действий"
  30. # Здесь должен быть код для отправки сообщения пользователю
  31. bot.send_notification("st_request_in_process@ej.sharix-app.org", message)
  32. print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}")
  33. def ticket_worker(ticket, start_time):
  34. if ticket.status == 131:
  35. if ticket.id not in tickets_nt:
  36. tickets_nt[ticket.id] = {
  37. "reminders": 0,
  38. "last_date_reminder": start_time
  39. }
  40. if (start_time - tickets_nt[ticket.id]["last_date_reminder"]) > DEFAULT_REMINDER_INTERVAL:
  41. if IS_INFINITE_REMINDER or tickets_nt[ticket.id]['reminders'] < MAX_REMINDERS:
  42. send_reminder("st_request_in_process@ej.sharix-app.org", ticket)
  43. else:
  44. del tickets_nt[ticket.id]
  45. # Функция смены статуса на WONTFIX
  46. tickets_nt[ticket.id]["reminders"] += 1
  47. tickets_nt[ticket.id]["last_date_reminder"] += start_time
  48. def ticket_list_worker(ticket_list, start_time):
  49. tickets=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket_list.id}")
  50. for ticket in tickets:
  51. ticket_worker(ticket, start_time)
  52. def status_changer():
  53. while True:
  54. ticket_lists = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/")
  55. for ticket_list in ticket_lists:
  56. start_time = datetime.now()
  57. # bot.bot_log(f"{botname} {start_time.strftime('%Y-%m-%d')} Тикет {ticketlist.id} в обработке\n")
  58. t1 = threading.Thread(target=ticket_list_worker, args=(ticket_list, start_time))
  59. t1.start()
  60. t1.join() # Ожидаем завершения обработки тикета
  61. time.sleep(DEFAULT_CHECK_INTERVAL)
  62. # Инициализация и запуск бота
  63. token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/")
  64. bot = JabberBot(JID, PASSWORD, PORT)
  65. bot.start(status_changer)