aboutsummaryrefslogtreecommitdiff
path: root/src/IRCBot.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/IRCBot.py')
-rw-r--r--src/IRCBot.py32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py
index fe62a071..32a4872b 100644
--- a/src/IRCBot.py
+++ b/src/IRCBot.py
@@ -190,15 +190,8 @@ class Bot(object):
return min([timeout for timeout in timeouts if not timeout == None])
def disconnect(self, server: IRCServer.Server):
- try:
- self._read_poll.unregister(server.fileno())
- except FileNotFoundError:
- pass
- try:
- self._write_poll.unregister(server.fileno())
- except FileNotFoundError:
- pass
del self.servers[server.fileno()]
+ self._trigger_both()
def _timed_reconnect(self, event: EventManager.Event):
if not self.reconnect(event["server_id"],
@@ -270,15 +263,17 @@ class Bot(object):
self._wtriggered = False
elif event & select.EPOLLOUT:
self._write_poll.unregister(fd)
- server = self.servers[fd]
+ if fd in self.servers:
+ server = self.servers[fd]
- try:
- lines = server._send()
- except:
- self.log.error("Failed to write to %s", [str(server)])
- raise
- self._event_queue.put(self._post_send_factory(server,
- lines))
+ try:
+ lines = server._send()
+ except:
+ self.log.error("Failed to write to %s",
+ [str(server)])
+ raise
+ self._event_queue.put(self._post_send_factory(server,
+ lines))
def _read_loop(self):
while self.running:
@@ -287,7 +282,6 @@ class Bot(object):
self._event_queue.put(lambda: None)
break
- #self.trigger(self._check)
self._event_queue.put(self._check)
events = self._read_poll.poll(self.get_poll_timeout())
@@ -299,6 +293,10 @@ class Bot(object):
with self._rtrigger_lock:
self._rtriggered = False
else:
+ if not fd in self.servers:
+ self._read_poll.unregister(fd)
+ continue
+
server = self.servers[fd]
if event & select.EPOLLIN:
lines = server.read()