diff --git a/modules/channel_op.py b/modules/channel_op.py index 11d5a0d5..749e7764 100644 --- a/modules/channel_op.py +++ b/modules/channel_op.py @@ -19,8 +19,9 @@ class InvalidTimeoutException(Exception): @utils.export("channelset", utils.Setting("ban-format", "Set ban format ($n = nick, $u = username, $h = hostname)", example="*!$u@$h")) -@utils.export("serverset", utils.Setting("mute-method", - "Set this server's method of muting users", example="qmode")) +@utils.export("serverset", utils.OptionsSetting("mute-method", + ["qmode", "insp", "unreal"], "Set this server's method of muting users", + example="qmode")) class Module(ModuleManager.BaseModule): _name = "ChanOp" diff --git a/modules/permissions/__init__.py b/modules/permissions/__init__.py index f27033bf..aae4d500 100644 --- a/modules/permissions/__init__.py +++ b/modules/permissions/__init__.py @@ -9,8 +9,9 @@ REQUIRES_IDENTIFY = "You need to be identified to use that command" REQUIRES_IDENTIFY_INTERNAL = ("You need to be identified to use that command " "(/msg %s register | /msg %s identify)") -@utils.export("serverset", utils.Setting("identity-mechanism", - "Set the identity mechanism for this server", example="ircv3-account")) +@utils.export("serverset", utils.OptionsSetting("identity-mechanism", + ["internal", "ircv3-account"], "Set the identity mechanism for this server", + example="ircv3-account")) class Module(ModuleManager.BaseModule): @utils.hook("new.user") def new_user(self, event): diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 5ad057c8..545360c8 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -257,3 +257,15 @@ class IntSetting(Setting): return int(stripped) return None +class OptionsSetting(Setting): + def __init__(self, name: str, options: typing.List[str], help: str=None, + example: str=None): + self._options = options + Setting.__init__(name, help, example) + + def parse(self, value: str) -> typing.Any: + value_lower = value.lower() + for option in self._options: + if option.lower() == value_lower: + return option + return None