st_request_in_process.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 = {}
  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. # print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}")
  32. def process_in_progress_ticket(ticket, max_reminders, default_reminder_interval, is_infinite_reminder, start_time):
  33. bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет в обработчике\n")
  34. tickets_new=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket.id}")
  35. if tickets_new:
  36. if not ticket.id in tickets:
  37. tickets[ticket.id] = {}
  38. for ticket_new in tickets_new:
  39. if ticket_new.id in tickets[ticket.id]:
  40. tickets[ticket.id][ticket_new.id] = {
  41. "reminders": 0,
  42. "last_date_reminder": start_time
  43. }
  44. if is_infinite_reminder or tickets[ticket.id][ticket_new.id]['reminders'] < max_reminders:
  45. if (start_time - tickets[ticket.id][ticket_new.id]["last_date_reminder"]) > default_reminder_interval:
  46. send_reminder("st_request_in_process@ej.sharix-app.org", ticket_new)
  47. tickets[ticket.id][ticket_new.id]["reminders"] += 1
  48. tickets[ticket.id][ticket_new.id]["last_date_reminder"] += start_time
  49. elif not is_infinite_reminder and tickets[ticket.id][ticket_new.id]['reminders'] >= max_reminders:
  50. del tickets[ticket.id][ticket_new.id]
  51. # Функция смены статуса на WONTFIX
  52. def status_changer():
  53. while True:
  54. ticketlist = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/")
  55. for ticket in ticketlist:
  56. bot.bot_log(f"{botname} {datetime.now().strftime('%Y-%m-%d')} Тикет {ticket.id} в обработке\n")
  57. start_time = datetime.now()
  58. t1 = threading.Thread(target=process_in_progress_ticket, args=(ticket, MAX_REMINDERS, DEFAULT_REMINDER_INTERVAL, IS_INFINITE_REMINDER, 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)