diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/signals.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/modules/signals.py b/modules/signals.py index eadf4d64..336a83d3 100644 --- a/modules/signals.py +++ b/modules/signals.py @@ -10,6 +10,29 @@ class Module(ModuleManager.BaseModule): def SIGINT(self, signum, frame): print() + self.bot.trigger(lambda: self._kill(signum)) + + def _kill(self, signum): + if self._exited: + return + self._exited = True + + self.events.on("signal.interrupt").call(signum=signum) + + written = False + for server in list(self.bot.servers.values()): + if server.connected: + server.socket.clear_send_buffer() + + line = utils.irc.protocol.quit("Shutting down") + sent_line = server.send(line, immediate=True) + sent_line.events.on("send").hook(self._make_hook(server)) + + server.send_enabled = False + written = True + + if not written: + sys.exit() def _make_hook(self, server): return lambda e: self.bot.disconnect(server) |
