from bot import loaded_modules_dict from bot.constants import TELNET_TIMEOUT_EXTENDED from os import path, pardir from time import time, sleep import random import re module_name = path.basename(path.normpath(path.join(path.abspath(__file__), pardir, pardir))) action_name = path.basename(path.abspath(__file__))[:-3] def kill_entity(module, event_data, dispatchers_steamid=None): timeout = TELNET_TIMEOUT_EXTENDED timeout_start = time() event_data[1]["action_identifier"] = action_name entity_to_be_killed = event_data[1].get("entity_id", None) command = "kill {}".format(entity_to_be_killed) if not module.telnet.add_telnet_command_to_queue(command): module.callback_fail(callback_fail, module, event_data, dispatchers_steamid) return poll_is_finished = False # Modern format - no datetime/stardate prefix regex = ( r"Entity\s(?P.*)\s" + str(entity_to_be_killed) + r"\skilled" ) number_of_attempts = 0 while not poll_is_finished and (time() < timeout_start + timeout): number_of_attempts += 1 telnet_buffer_copy = (module.telnet.telnet_buffer + '.')[:-1] for match in re.finditer(regex, telnet_buffer_copy, re.DOTALL): return match sleep(1) return False def main_function(module, event_data, dispatchers_steamid): action = event_data[1].get("action", None) dataset = event_data[1].get("dataset") entity_id = event_data[1].get("entity_id") entity_name = event_data[1].get("entity_name") if action is not None: if action == "kill": match = kill_entity(module, event_data, dispatchers_steamid) if match is not False: if entity_name == "zombieScreamer": module.callback_success(callback_success, module, event_data, dispatchers_steamid, match) module.callback_fail(callback_fail, module, event_data, dispatchers_steamid) def callback_success(module, event_data, dispatchers_steamid, match=None): action = event_data[1].get("action", None) entity_id = event_data[1].get("entity_id") entity_name = event_data[1].get("entity_name") if all([ action is not None ]): if entity_name == "zombieScreamer": possible_maybes = [ "hopefully", "probably dead, yes!", "i think", "i'm almost certain", "yeah. definitely!!" ] event_data = ['say_to_all', { 'message': '[CCFFCC]Screamer ([FFFFFF]{entity_id}[CCFFCC]) killed[-], [FFFFFF]{maybe}[-]...'.format( entity_id=entity_id, maybe=random.choice(possible_maybes) ) }] module.trigger_action_hook(module, event_data=event_data) else: event_data = ['say_to_all', { 'message': '[CCFFCC]entity ([FFFFFF]{entity_id}[CCFFCC]) killed[-]'.format( entity_id=entity_id ) }] module.trigger_action_hook(module, event_data=event_data) def callback_fail(module, event_data, dispatchers_steamid): pass action_meta = { "description": "manages entity entries", "main_function": main_function, "callback_success": callback_success, "callback_fail": callback_fail, "requires_telnet_connection": False, "enabled": True } loaded_modules_dict["module_" + module_name].register_action(action_name, action_meta)