from pywinauto.application import Application, ProcessNotFoundError from pywinauto.findwindows import ElementNotFoundError from src import data from src import config def send_text(text: str) -> None: app = Application() try: app.connect(path=config.conf['General']['poe_path']) except ProcessNotFoundError: data.log.warning(f'App "{config.conf["General"]["poe_window_title"]}": "{config.conf["General"]["poe_path"]}" not found') return try: win = app.window(title_re=config.conf['General']['poe_window_title']) except ElementNotFoundError: data.log.warning(f'Window Title "{config.conf["General"]["poe_window_title"]}" not found') return text = escape_mods(text) win.set_keyboard_focus() win.wait(wait_for='active') win.type_keys('{ENTER}^A{DELETE}' + text + '{ENTER}', with_spaces=True, pause=config.conf['General']['after_sendkeys_key_wait']) def escape_mods(text: str) -> str: text = text.replace('%', '{%}') text = text.replace('+', '{+}') text = text.replace('^', '{^}') text = text.replace('(', '{(}') text = text.replace(')', '{)}') text = text.replace('~', '{~}') return text def send_to(user: str, text: str) -> None: send_text(f'@{user} {text}') def send_to_format(type: str, message: data.Message) -> None: """Send a message defined in the conf dict to a user Args: type (str): The type of message. This is defined in conf['Chat']. message (data.Message): Message data. Placeholders in the message type will be replaced with this data. conf (dict): Configution dictionary where the messages are stored. """ if message.trade: text = config.conf['Chat'][type].format(message=message.message, date=message.date, channel=message.channel.name, user=message.user, guild=message.guild, to_from=message.to_from, item=message.trade.item, amount=message.trade.amount, currency=message.trade.currency, tab=message.trade.tab, row=message.trade.row, col=message.trade.col, league=message.trade.league) else: text = config.conf['Chat'][type].format(message=message.message, date=message.date, channel=message.channel.name, user=message.user, guild=message.guild, to_from=message.to_from) send_to(message.user, text) def invite(message: data.Message) -> None: send_text(f'/invite {message.user}') def join(message: data.Message) -> None: send_text(f'/hideout {message.user}') def return_to_ho() -> None: send_text('/hideout') def kick(message: data.Message) -> None: send_text(f'/kick {message.user}') def leave() -> None: send_text('/leave') def trade(message: data.Message) -> None: send_text(f'/tradewith {message.user}')