Source code for abacura.plugins.aliases.manager

from __future__ import annotations

import csv
import io
import re
from typing import Dict, TYPE_CHECKING

from serum import inject

if TYPE_CHECKING:
    from abacura import Session
    from abacura.config import Config


[docs]@inject class AliasManager: """Alias manager""" session: Session config: Config def __init__(self): super().__init__() self.aliases: Dict[str, str] = {} self.aliases["test"] = r'kill %1;loot %1;smile %2' self.re_param = re.compile(r'^%([0-9]+)')
[docs] def handle(self, cmd, line): """Handle aliases, return True if success, False if missing""" if cmd in self.aliases: args = line.split() try: command_list = csv.reader(io.StringIO(self.aliases[cmd]), delimiter=';', escapechar='\\') lines = command_list.__next__() for alias_line in lines: file_like = io.StringIO(alias_line) parts = next(csv.reader(file_like, delimiter=' ')) # self.session.output(f"[bold yellow] PREPARSE: {list(parts)}", markup = True) parsed = [] for token in parts: m = self.re_param.match(token) if m: parsed.append(args[int(m.group(1))] if int(m.group(1)) < len(args) else r'') else: parsed.append(token) # self.session.output(f"Parsed: {parsed}") parsed_alias = ' '.join(parsed) # SEND # self.session.output(f"[bold yellow] SEND: {parsed_alias}", markup = True) self.session.player_input(parsed_alias) except StopIteration: pass return True return False