aboutsummaryrefslogtreecommitdiff
path: root/IRCServer.py
diff options
context:
space:
mode:
Diffstat (limited to 'IRCServer.py')
-rw-r--r--IRCServer.py26
1 files changed, 23 insertions, 3 deletions
diff --git a/IRCServer.py b/IRCServer.py
index 34358e44..9cb5e18f 100644
--- a/IRCServer.py
+++ b/IRCServer.py
@@ -26,6 +26,8 @@ class Server(object):
self.original_username = username or nickname
self.original_realname = realname or nickname
self.name = None
+ self._capability_queue = set([])
+ self._capabilities_waiting = set([])
self.write_buffer = b""
self.buffered_lines = []
@@ -79,7 +81,7 @@ class Server(object):
def connect(self):
self.socket.connect((self.target_hostname, self.port))
- self.events.on("preprocess.connect").call(server=self)
+ self.send_capibility_ls()
if self.password:
self.send_pass(self.password)
@@ -273,13 +275,31 @@ class Server(object):
def send_nick(self, nickname):
self.send("NICK %s" % nickname)
- def send_capability_request(self, capname):
- self.send("CAP REQ :%s" % capname)
+ def send_capibility_ls(self):
+ self.send("CAP LS")
+ def queue_capability(self, capability):
+ self._capability_queue.add(capability)
+ def send_capability_queue(self):
+ if self.has_capability_queue():
+ capabilities = " ".join(self._capability_queue)
+ self._capability_queue.clear()
+ self.send_capability_request(capabilities)
+ def has_capability_queue(self):
+ return bool(len(self._capability_queue))
+ def send_capability_request(self, capability):
+ self.send("CAP REQ :%s" % capability)
def send_capability_end(self):
self.send("CAP END")
def send_authenticate(self, text):
self.send("AUTHENTICATE %s" % text)
+ def wait_for_capability(self, capability):
+ self._capabilities_waiting.add(capability)
+ def capability_done(self, capability):
+ self._capabilities_waiting.remove(capability)
+ if not self._capabilities_waiting:
+ self.send_capability_end()
+
def send_pass(self, password):
self.send("PASS %s" % password)