123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- from ...messaging import RollbotMessage
- class ArgConverter:
- def __init__(self, conv):
- self.conv = conv
- Message = ArgConverter(lambda _, __, msg: msg)
- Database = ArgConverter(lambda _, db, __: db)
- Logger = ArgConverter(lambda cmd, _, __: cmd.logger)
- Bot = ArgConverter(lambda cmd, _, __: cmd.bot)
- ArgList = ArgConverter(lambda _, __, msg: msg.arg_list())
- Subcommand = ArgConverter(lambda _, __, msg: RollbotMessage.from_subcommand(msg))
- class Config(ArgConverter):
- def __init__(self, key):
- super().__init__(lambda cmd, _, __, key=key: cmd.bot.config.get(key))
- class Singleton(ArgConverter):
- def __init__(self, cls):
- super().__init__(lambda _, db, msg, cls=cls: cls.get_or_create(db, msg))
- def get_converters(parameters, annotations):
- converters = []
- for p in parameters:
- annot = annotations.get(p, None)
- if isinstance(annot, ArgConverter):
- converters.append(annot.conv)
- elif p in ("msg", "message", "_msg"):
- converters.append(lambda cmd, db, msg: msg)
- elif p in ("db", "database"):
- converters.append(lambda cmd, db, msg: db)
- elif p in ("log", "logger"):
- converters.append(lambda cmd, db, msg: cmd.logger)
- elif p in ("bot", "rollbot"):
- converters.append(lambda cmd, db, msg: cmd.bot)
- elif p in ("args", "arg_list"):
- converters.append(lambda cmd, db, msg: msg.arg_list())
- elif p in ("subc", "subcommand"):
- converters.append(lambda cmd, db, msg: RollbotMessage.from_subcommand(msg))
- elif p in ("cfg", "config"):
- converters.append(lambda cmd, db, msg: cmd.bot.config)
- elif p.startswith("cfg") or p.endswith("cfg"):
- annot = annot or p
- converters.append(lambda cmd, db, msg, key=annot: cmd.bot.config.get(key))
- elif p.startswith("data") or p.endswith("data"):
- converters.append(lambda cmd, db, msg, sing_cls=annot: sing_cls.get_or_create(db, msg))
- else:
- raise ValueError(p)
- return converters
|