args.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from argparse import ArgumentParser, Namespace
  2. from typing import Optional
  3. import shlex
  4. from ..types import Message, Context
  5. from .base import Injector
  6. __all__ = [
  7. "Args",
  8. "ArgList",
  9. "ArgListSplitOn",
  10. "ArgParse",
  11. ]
  12. class ArgsInjector(Injector[str]):
  13. async def inject(self, message: Message, context: Context) -> str:
  14. return message.command.args
  15. class ArgListSplitOn(Injector[list[str]]):
  16. def __init__(self, split: Optional[str] = None):
  17. self.split = split
  18. async def inject(self, message: Message, context: Context) -> str:
  19. if self.split is not None:
  20. return message.command.args.split(self.split)
  21. else:
  22. return message.command.args.split()
  23. class ArgParse(Injector[Namespace]):
  24. def __init__(self, parser: ArgumentParser):
  25. self.parser = parser
  26. async def inject(self, message: Message, context: Context) -> Namespace:
  27. return self.parser.parse_args(shlex.split(message.text))
  28. Args = ArgsInjector()
  29. ArgList = ArgListSplitOn()
  30. # TODO Arg(n)