aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/IRCChannel.py12
-rw-r--r--src/IRCServer.py1
-rw-r--r--src/core_modules/line_handler/core.py7
3 files changed, 18 insertions, 2 deletions
diff --git a/src/IRCChannel.py b/src/IRCChannel.py
index fc1317df..5848646a 100644
--- a/src/IRCChannel.py
+++ b/src/IRCChannel.py
@@ -215,17 +215,25 @@ class Channel(IRCObject.Object):
def send_tagmsg(self, tags: dict):
return self.server.send_tagmsg(self.name, tags)
+ def _chunks(self, n: int, l: typing.List[str]):
+ return [l[i:i+n] for i in range(0, len(l), n)]
+
def send_mode(self, mode: str=None, target: typing.List[str]=None):
return self.server.send_mode(self.name, mode, target)
def send_modes(self, mode: str, add: bool, args: typing.List[str]):
chunk_n = int(self.server.isupport.get("MODES", "3") or "6")
- chunks = [args[i:i+chunk_n] for i in range(0, len(args), chunk_n)]
- for chunk in chunks:
+ for chunk in self._chunks(chunk_n, args):
mode_str = "%s%s" % ("+" if add else "-", mode*len(chunk))
self.server.send_mode(self.name, mode_str, chunk)
def send_kick(self, target: str, reason: str=None):
return self.server.send_kick(self.name, target, reason)
+ def send_kicks(self, targets: typing.List[str], reason: str=None):
+ chunk_n = self.server.targmax.get("KICK", 1)
+ for chunk in self._chunks(chunk_n, targets):
+ chan_str = ",".join([self.name]*len(chunk))
+ self.server.send_kick(chan_str, ",".join(chunk), reason)
+
def send_ban(self, hostmask: str):
return self.server.send_mode(self.name, "+b", [hostmask])
def send_unban(self, hostmask: str):
diff --git a/src/IRCServer.py b/src/IRCServer.py
index 3549981b..bf25f494 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -62,6 +62,7 @@ class Server(IRCObject.Object):
self.channel_types = ["#"]
self.case_mapping = "rfc1459"
self.statusmsg = [] # type: typing.List[str]
+ self.targmax = {}
self.motd_lines = [] # type: typing.List[str]
self.motd_done = False
diff --git a/src/core_modules/line_handler/core.py b/src/core_modules/line_handler/core.py
index c72bcb77..a7075613 100644
--- a/src/core_modules/line_handler/core.py
+++ b/src/core_modules/line_handler/core.py
@@ -61,6 +61,13 @@ def handle_005(events, event):
list_numeric = qiuet.get(2, "367") # RPL_BANLIST
end_numeric = quiet.get(3, "368") # RPL_ENDOFBANLIST
event["server"].quiet = [quiet[0], prefix, list_numeric, end_numeric]
+ if "TARGMAX" in isupport:
+ targmax = {}
+ for piece in isupport["TARGMAX"].split(","):
+ cmd, _, n = piece.partition(":")
+ if n:
+ targmax[cmd] = int(n)
+ event["server"].targmax = targmax
events.on("received.005").call(isupport=isupport,
server=event["server"])