70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
|
import argparse
|
||
|
import itertools
|
||
|
import logging
|
||
|
import logging.config
|
||
|
from pathlib import Path
|
||
|
from typing import List
|
||
|
|
||
|
from . import __url__, __author__, __version__, config, graph
|
||
|
from .slpp import slpp as lua
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
class CLI:
|
||
|
def __init__(self) -> None:
|
||
|
super().__init__()
|
||
|
|
||
|
def parse_args(self):
|
||
|
parser = argparse.ArgumentParser(
|
||
|
prog="bb",
|
||
|
description=f"BigBrother v{__version__} by {__author__}.",
|
||
|
epilog=f"For more information, see <{__url__}>."
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
dest="saved_variables",
|
||
|
type=lambda s: Path(s),
|
||
|
help="Path to WTF/Account/<ACCOUNT>/SavedVariables/BigBrother.lua",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-v", "--verbose",
|
||
|
action="count",
|
||
|
default=0,
|
||
|
help="Increase verbosity level. Can be used multiple times."
|
||
|
)
|
||
|
return parser.parse_args()
|
||
|
|
||
|
def select_raid(self, saved_variables: Path) -> List[dict]:
|
||
|
text = saved_variables.read_text(encoding="utf8")
|
||
|
db = lua.decode(f"{{{text}}}") # double-{} since slpp requires all variables to be part of a lua table
|
||
|
raids = []
|
||
|
for zone, encounters in itertools.groupby(db["BigBrotherDB"], key=lambda x: (x["zone"], x["date"][:10])):
|
||
|
raids.append(list(encounters))
|
||
|
raids.reverse() # ensure latest raid is first
|
||
|
for i, raid in enumerate(raids, start=1):
|
||
|
print(f"{i:3} {raid[0]['date']} {raid[0]['zone']}")
|
||
|
choice = int(input("Raid: "))
|
||
|
return raids[choice-1]
|
||
|
|
||
|
def prompt_delete_saved_variables(self, saved_variables: Path) -> None:
|
||
|
if input("Delete saved variables BigBrother.lua? [y/N] ").lower() == "y":
|
||
|
saved_variables.unlink()
|
||
|
logger.info("%s deleted.", saved_variables)
|
||
|
|
||
|
def run(self) -> None:
|
||
|
args = self.parse_args()
|
||
|
logging.config.dictConfig(config.get_logging_config(level=("WARNING", "INFO", "DEBUG")[min(args.verbose, 2)]))
|
||
|
logger.debug("Args: %s", args)
|
||
|
raid = self.select_raid(args.saved_variables)
|
||
|
graph.graph(raid)
|
||
|
self.prompt_delete_saved_variables(args.saved_variables)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
cli = CLI()
|
||
|
cli.run()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|