diff options
Diffstat (limited to 'src/IRCBot.py')
| -rw-r--r-- | src/IRCBot.py | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py index 67a85c42..f5407e59 100644 --- a/src/IRCBot.py +++ b/src/IRCBot.py @@ -2,7 +2,7 @@ import enum, queue, os, select, socket, threading, time, traceback, typing, uuid from src import EventManager, Exports, IRCServer, Logging, ModuleManager from src import Socket, utils -VERSION = "v1.7.1" +VERSION = "v1.8.0" SOURCE = "https://git.io/bitbot" class TriggerResult(enum.Enum): @@ -62,8 +62,18 @@ class Bot(object): def load_modules(self, safe: bool=False ) -> typing.Tuple[typing.List[str], typing.List[str]]: - whitelist = self.get_setting("module-whitelist", []) - blacklist = self.get_setting("module-blacklist", []) + db_blacklist = set(self.get_setting("module-blacklist", [])) + db_whitelist = set(self.get_setting("module-whitelist", [])) + + conf_blacklist = self.config.get("module-blacklist", "").split(",") + conf_whitelist = self.config.get("module-whitelist", "").split(",") + + conf_blacklist = set(filter(None, conf_blacklist)) + conf_whitelist = set(filter(None, conf_whitelist)) + + blacklist = db_blacklist|conf_blacklist + whitelist = db_whitelist|conf_whitelist + return self.modules.load_modules(self, whitelist=whitelist, blacklist=blacklist, safe=safe) @@ -237,7 +247,13 @@ class Bot(object): for piece in data: sock.parse_data(piece) elif event & select.EPOLLOUT: - sock._send() + try: + sock._send() + except: + self.log.error("Failed to write to %s", + [str(sock)]) + raise + if sock.fileno() in self.servers: self.register_read(sock) elif event & select.EPULLHUP: @@ -262,7 +278,8 @@ class Bot(object): self.log.warn( "Disconnected from %s, reconnecting in %d seconds", [str(server), reconnect_delay]) - elif (server.socket.waiting_send() and + elif server.socket.waiting_immediate_send() or ( + server.socket.waiting_send() and server.socket.throttle_done()): self.register_both(server) |
