aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2020-01-22 15:00:59 +0000
committerGravatar jesopo2020-01-22 15:00:59 +0000
commitade5cbb1f37d06fe77d21f344d030904cc19034d (patch)
tree57fb5183321d14b0bbe321d5046a910c49e00ca0
parenteffectively ignore ENDOF when there were no items (diff)
signature
add an optional mask pattern arg to !clear
-rw-r--r--modules/channel_op.py11
-rw-r--r--src/utils/irc.py4
2 files changed, 10 insertions, 5 deletions
diff --git a/modules/channel_op.py b/modules/channel_op.py
index 1e0f28ea..d18d18f9 100644
--- a/modules/channel_op.py
+++ b/modules/channel_op.py
@@ -454,14 +454,19 @@ class Module(ModuleManager.BaseModule):
@utils.kwarg("require_mode", "o")
@utils.kwarg("require_access", "clear")
@utils.kwarg("help", "Clear a given channel list mode (e.g. +b)")
- @utils.kwarg("usage", "+<mode>")
+ @utils.kwarg("usage", "+<mode> [mask]")
def clear(self, event):
type = event["args_split"][0]
if type[0] == "+" and type[1:]:
mode = type[1]
if mode in event["target"].mode_lists:
- chunks = self._chunk(
- event["server"], list(event["target"].mode_lists[mode]))
+ mode_list = event["target"].mode_lists[mode]
+ if len(event["args_split"]) > 1:
+ hostmask = utils.irc.hostmask_parse(event["args_split"][1])
+ mode_list = list(utils.irc.hostmask_match_many(
+ mode_list, hostmask))
+
+ chunks = self._chunk(event["server"], list(mode_list))
for chunk in chunks:
event["target"].send_mode("-%s" % mode*len(chunk), chunk)
else:
diff --git a/src/utils/irc.py b/src/utils/irc.py
index adc62a32..7194663f 100644
--- a/src/utils/irc.py
+++ b/src/utils/irc.py
@@ -287,8 +287,8 @@ def hostmask_match_many(hostmasks: typing.List[str], pattern: HostmaskPattern,
) -> typing.Optional[str]:
for hostmask in hostmasks:
if pattern.match(hostmask):
- return hostmask
+ yield hostmask
return None
def hostmask_match(hostmask: str, pattern: HostmaskPattern) -> bool:
- return not hostmask_match_many([hostmask], pattern) == None
+ return any(hostmask_match_many([hostmask], pattern))