def __init__(self): logging.info('Bot __init__') self.last_msg = -1 self.msg_flood_limit = 0.25 with open(os.path.join(os.path.dirname(__file__), 'ircbot.conf')) as f: data = json.load(f) self.servers = data['servers'] self.select_server(0) self.db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'ircbot.sqlite3'), check_same_thread=False) cursor = self.db.cursor() try: cursor.execute('select * from config limit 1') except sqlite3.OperationalError: # table no exist cursor.execute( 'create table config ( `group` varchar(100), `key` varchar(100), `value` varchar(100) NULL )' ) cursor.close() modules_blacklist = data.get('blacklist', None) self.modules = ModuleManager(self, modules_blacklist) self.channel_ops = {} server = self.current_server['host'] port = self.current_server[ 'port'] if 'port' in self.current_server else 6667 ssl_enabled = self.current_server[ 'ssl'] if 'ssl' in self.current_server else False ipv6_enabled = self.current_server[ 'ipv6'] if 'ipv6' in self.current_server else False password = self.current_server[ 'password'] if 'password' in self.current_server else '' nickname = self.current_server['nickname'] factory = irc.connection.Factory( wrapper=ssl.wrap_socket if ssl_enabled else lambda x: x, ipv6=ipv6_enabled) super(Bot, self).__init__([irc.bot.ServerSpec(server, port, password)], nickname, nickname, connect_factory=factory) self.connection.set_rate_limit(30) for module_name in self.modules.get_available_modules(): self.modules.enable_module(module_name)
def __init__(self, config_file): self.config_file = config_file self.config = json.load(open(self.config_file)) self.me = self.config["me"] self.net = self.config["network"] self.module_manager = ModuleManager(self) self.hook_manager = HookManager(self) self.perms = Permissions(self) self.connection = IRCConnection(self.net["address"], self.net["port"], self.net["ssl"], self.config["proxies"].get(self.net.get("proxy", "none"), None), self.net.get("flood_interval", 0.0)) self.running = True self.state = {} # Dict used to hold stuff like last line received and last message etc... self.db = Database("etc/buhirc.db") self.db.connect() logging.basicConfig(level=getattr(logging, self.config["misc"]["loglevel"]), format='[%(asctime)s] %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') self.requests_session = requests.session() if self.config["misc"].get("http_proxy", "none") != "none": proxy = self.config["proxies"].get(self.config["misc"]["http_proxy"], "none") if proxy != "none": self.requests_session.proxies = {"http": proxy, "https": proxy} self.flood_verbs = [x.lower() for x in self.net.get("flood_verbs", [])] self.help = {}