def on_message(self, bot: Bot, message: bytes): """When server receives message from bot.""" message = super().on_message(bot, message) if message is None: return event_type = message.get("event_type") if event_type == "log": self.log.emit( bot, Log(bot.id(), message.get("thread_name"), message.get("name"), message.get("level"), message.get("msg"))) elif event_type == "task": state = message.get("state") task_id = message.get("task_id") task = bot.get_task_by_id(task_id) if task: if state == "queued": task.set_queued(datetime.datetime.now()) elif state == "started": task.set_running(datetime.datetime.now()) elif state == "finished": task.set_finished(datetime.datetime.now(), message.get("result"), message.get("exit_code")) else: self.logger.error( "Unknown task state for message {}".format(message)) return self.task.emit(task) else: self.logger.error( "Could not find task with ID {} for bot {}".format( task_id, bot.id())) elif event_type == "info": event = Info(bot.id(), message.get("info"), message.get("results")) bot.on_info_received(event) self.info.emit(event) elif event_type == "shell": event = message.get("event") if event == "error": self.shell_error.emit(bot, message.get("error")) elif event == "output": self.shell_output.emit(bot, str(message.get("output"))) else: self.logger.error( "BOT-{}: Failed to find matching event type for {}".format( bot.id(), message)) self.message.emit(bot, message)
def send_info(self, bot: Bot, info_list: list): """Send info request.""" info = Info(bot.id(), info_list) bot.on_info_received(info) bot.write(info.create())