# раскомментировать, когда перейдем на разные пароли import hashlib import threading import time from datetime import datetime import config # test import jsonAndRequest as jsreq from BotClass import JabberBot global tasklist # В этом файле содержится только то, что запускает конкретный обработчик # botname="open_st_request_assigned" botname = "open_neg_request_pending" operating_status = 420 JID = botname + "@" + config.JSERVER PORT = config.PORT # раскомментировать, когда перейдем на разные пароли PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest() print(JID, PASSWORD) # таким образом хранится список jid, от которых можно получать сообщения этому боту listen_to = ["open_neg_request_pending@ej.sharix-app.org"] # тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки proceed_to = ["open_neg_request_pending@ej.sharix-app.org", "open_neg_request_declined@ej.sharix-app.org"] # максимальное значение попыток обработать заказ idle_value = 10 # обработчик входящих сообщений def message_handler(conn, mess): text = mess.getBody() # текст сообщения боту user = mess.getFrom() # отправитель сообщения # user = mess.getNode()#только jid # нужна проверка, данный обработчик вообще должен от данного отправителя получать сообщения или нет. Подсказка ниже print(str(user).split("/")[0]) if (str(user).split("/")[0]) in listen_to: print(text) print(mess) if text is not None: orderObj = jsreq.jsonToOrderTicket(text) print(orderObj) tasklist.append(orderObj) bot.bot_log(str(datetime.now()) + " Поступивший заказ успешно добавлен в очередь обработки\n") # TODO - для обработчиков Ticket скорее надо будет функции вынести в отдельную библиотеку, они типовые же def pending_wait(period, localtask): bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ ожидает пользовательской реакции\n") time.sleep(period) # ВАЖНО! НАДО ВСТАВИТЬ ИЗМЕНЕНИЕ СТАТУСА ЧЕРЕЗ API # обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется bot.proceed_status(proceed_to[1], localtask) bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ отклонен\n") def open_neg_request_pending(): # print("Тут описывается работа со списком задач в данном статусе") while (len(tasklist)): localtask = tasklist.pop(0) bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + "Заказ в очереди на обработке\n") # если боту почему-то пришла не его заявка - это явно ошибка движения процессов и отдаем в форсмажор - этот обработчик указывать стоит всегда последним # if (localtask.status!=operating_status): # bot.proceed_status(proceed_to[-1],localtask) # bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n") # continue # TODO: send_notifications - изучить как в комнату # ЖДАТЬ НАДО ПОДОЛЬШЕ t1 = threading.Thread(target=pending_wait, args=(100, localtask)) t1.start() # если никакие обработчики не подошли - отправляем обратно в очередь # bot.proceed_status(proceed_to[0],localtask) # print("Заказ возвращен в очередь\n") # print (tasklist) # Авторизация и запуск бота # пустой список заказов tasklist = [] # надо инициализировать tasklist при запуске из API token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL + "/auth/token/login/") # ВАЖНО! Надо понять, по такому ли запросу разумно делать фильтр - или поменять порядок tasklist = jsreq.requestGetList(token, config.API_URL + "/tickets/api/tickets/?status=210&list_id=10") print(len(tasklist)) bot = JabberBot(JID, PASSWORD, PORT) bot.register_handler('message', message_handler) bot.start(open_neg_request_pending)