1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import json
- import requests
- import config
- from BotClass import JabberBot
- import hashlib
- from datetime import datetime
- import time
- import threading
- import jsonAndRequest as jsreq
- global ticketlist
- botname = "st_request_in_process"
- 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"]
- # Новые параметры
- IS_INFINITE_REMINDER = False
- DEFAULT_REMINDER_INTERVAL = 30 * 60 # 30 минут в секундах
- MAX_REMINDERS = 3 # Максимальное количество напоминаний
- DEFAULT_CHECK_INTERVAL = 5 * 60 # Проверка тикетов каждые 5 минут
-
- tickets = {}
- def send_reminder(user, ticket):
- message = f"Напоминание: необходимо принять решение по тикету {ticket.id}"
- # Здесь должен быть код для отправки сообщения пользователю
- bot.send_notification("st_request_in_process@ej.sharix-app.org", "message")
- 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, max_reminders, default_reminder_interval, is_infinite_reminder, start_time):
- bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет в обработчике\n")
- tickets_new=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket.id}")
- if tickets_new:
- if not ticket.id in tickets:
- tickets[ticket.id] = {}
- for ticket_new in tickets_new:
- if ticket_new.id in tickets[ticket.id]:
- tickets[ticket.id][ticket_new.id] = {
- "reminders": 0,
- "last_date_reminder": start_time
- }
-
- if is_infinite_reminder or tickets[ticket.id][ticket_new.id]['reminders'] < max_reminders:
- if (start_time - tickets[ticket.id][ticket_new.id]["last_date_reminder"]) > default_reminder_interval:
- send_reminder("st_request_in_process@ej.sharix-app.org", ticket_new)
- tickets[ticket.id][ticket_new.id]["reminders"] += 1
- tickets[ticket.id][ticket_new.id]["last_date_reminder"] += start_time
- elif not is_infinite_reminder and tickets[ticket.id][ticket_new.id]['reminders'] >= max_reminders:
- del tickets[ticket.id][ticket_new.id]
- # Функция смены статуса на WONTFIX
- def status_changer():
- while True:
- ticketlist = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/")
- for ticket in ticketlist:
- bot.bot_log(f"{botname} {datetime.now().strftime('%Y-%m-%d')} Тикет {ticket.id} в обработке\n")
- start_time = datetime.now()
- t1 = threading.Thread(target=process_in_progress_ticket, args=(ticket, MAX_REMINDERS, DEFAULT_REMINDER_INTERVAL, IS_INFINITE_REMINDER, start_time))
- t1.start()
- t1.join() # Ожидаем завершения обработки тикета
- time.sleep(DEFAULT_CHECK_INTERVAL)
- # Инициализация и запуск бота
- token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/")
- bot = JabberBot(JID, PASSWORD, PORT)
- bot.start(status_changer)
|