add an optional mask pattern arg to !clear
This commit is contained in:
parent
463ce89fba
commit
ade5cbb1f3
2 changed files with 10 additions and 5 deletions
|
@ -454,14 +454,19 @@ class Module(ModuleManager.BaseModule):
|
||||||
@utils.kwarg("require_mode", "o")
|
@utils.kwarg("require_mode", "o")
|
||||||
@utils.kwarg("require_access", "clear")
|
@utils.kwarg("require_access", "clear")
|
||||||
@utils.kwarg("help", "Clear a given channel list mode (e.g. +b)")
|
@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):
|
def clear(self, event):
|
||||||
type = event["args_split"][0]
|
type = event["args_split"][0]
|
||||||
if type[0] == "+" and type[1:]:
|
if type[0] == "+" and type[1:]:
|
||||||
mode = type[1]
|
mode = type[1]
|
||||||
if mode in event["target"].mode_lists:
|
if mode in event["target"].mode_lists:
|
||||||
chunks = self._chunk(
|
mode_list = event["target"].mode_lists[mode]
|
||||||
event["server"], 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:
|
for chunk in chunks:
|
||||||
event["target"].send_mode("-%s" % mode*len(chunk), chunk)
|
event["target"].send_mode("-%s" % mode*len(chunk), chunk)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -287,8 +287,8 @@ def hostmask_match_many(hostmasks: typing.List[str], pattern: HostmaskPattern,
|
||||||
) -> typing.Optional[str]:
|
) -> typing.Optional[str]:
|
||||||
for hostmask in hostmasks:
|
for hostmask in hostmasks:
|
||||||
if pattern.match(hostmask):
|
if pattern.match(hostmask):
|
||||||
return hostmask
|
yield hostmask
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def hostmask_match(hostmask: str, pattern: HostmaskPattern) -> bool:
|
def hostmask_match(hostmask: str, pattern: HostmaskPattern) -> bool:
|
||||||
return not hostmask_match_many([hostmask], pattern) == None
|
return any(hostmask_match_many([hostmask], pattern))
|
||||||
|
|
Loading…
Reference in a new issue