aboutsummaryrefslogtreecommitdiff
path: root/src/IRCServer.py
diff options
context:
space:
mode:
authorGravatar Valentin Lorentz2019-10-23 21:09:19 +0200
committerGravatar Valentin Lorentz2019-10-23 21:20:56 +0200
commitd8c48fa98f1b5c45dcd23c920768875775961849 (patch)
treea31146d7d0ea5777be3df9bc65178110a70d6c40 /src/IRCServer.py
parentexplicitly break event loop on Kill (diff)
signature
Make send_capability_queue split 'CAP REQ' message based on string length.
Instead of sending caps by groups of 10.
Diffstat (limited to 'src/IRCServer.py')
-rw-r--r--src/IRCServer.py18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/IRCServer.py b/src/IRCServer.py
index 3c7a634d..efcf1fa3 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -1,4 +1,4 @@
-import collections, datetime, sys, time, typing
+import collections, datetime, sys, textwrap, time, typing
from src import EventManager, IRCBot, IRCChannel, IRCChannels, IRCLine
from src import IRCObject, IRCSocket, IRCUser, utils
@@ -305,17 +305,13 @@ class Server(IRCObject.Object):
def send_capibility_ls(self) -> typing.Optional[IRCLine.SentLine]:
return self.send(utils.irc.protocol.capability_ls())
def send_capability_queue(self):
- capability_queue = list(self.capability_queue.keys())
+ # textwrap works here because in ASCII, all chars are 1 bytes:
+ capabilities = " ".join(self.capability_queue.keys())
+ capability_batches = textwrap.wrap(capabilities,
+ IRCLine.LINE_MAX-len("CAP REQ :"))
- for i in range(0, len(capability_queue), 10):
- capability_batch = capability_queue[i:i+10]
-
- for cap_name in capability_batch:
- cap = self.capability_queue[cap_name]
- del self.capability_queue[cap_name]
- self.capabilities_requested[cap_name] = cap
-
- self.send_capability_request(" ".join(capability_batch))
+ for capability_batch in capability_batches:
+ self.send_capability_request(capability_batch)
def send_capability_request(self, capability: str
) -> typing.Optional[IRCLine.SentLine]: