""" dr.botzo - a pluggable IRC bot written in Python Copyright (C) 2010 Brian S. Stephan This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from ConfigParser import ConfigParser, NoSectionError, NoOptionError import logging import logging.config import os import re import sys import inspect import sqlite3 import DrBotIRC from extlib import irclib moduleList = [ "Countdown", "Dice", "IrcAdmin", "GoogleTranslate", "Seen", "FactFile" ] modObjs = [] config_file = 'dr.botzo.cfg' # check argv if len(sys.argv) == 2: config_file = sys.argv[1] # read config file config = ConfigParser({'debug': 'false'}) config.read(os.path.expanduser(config_file)) # load necessary options try: # load connection info botserver = config.get('dr.botzo', 'server') botport = config.getint('dr.botzo', 'port') botnick = config.get('dr.botzo', 'nick') botpass = config.get('dr.botzo', 'pass') botuser = config.get('dr.botzo', 'user') botircname = config.get('dr.botzo', 'name') except NoSectionError as e: sys.exit("Aborted due to error with necessary configuration: " + str(e)) except NoOptionError as e: sys.exit("Aborted due to error with necessary configuration: " + str(e)) # load additional options irclib.DEBUG = config.getboolean('dr.botzo', 'debug') logging.config.fileConfig('logging.cfg') log = logging.getLogger('dr.botzo') try: # make sure we can initialize the database, if such a thing is # called for in the config file dbfile = config.get('dr.botzo', 'database') conn = sqlite3.connect(dbfile, isolation_level=None) try: query = """ SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'drbotzo_modules' """ row = conn.execute(query).fetchone() if row[0] == 0: # need to create the drbotzo_modules table query = """ CREATE TABLE drbotzo_modules ( module TEXT PRIMARY KEY, version INTEGER ) """ conn.execute(query) conn.commit() finally: conn.close() except NoOptionError: pass # if the config file has no db property, assume that except NoSectionError: pass # the database doesn't need to exist # start up the IRC bot # create IRC and server objects and connect irc = DrBotIRC.DrBotIRC(config) server = irc.server().connect(botserver, botport, botnick, botpass, botuser, botircname) # load features try: cfgmodlist = config.get('dr.botzo', 'module_list') mods = cfgmodlist.split(',') for mod in mods: irc.load_module(mod) except NoSectionError as e: log.error("You seem to be missing a modules config section, which you probably wanted.") except NoOptionError as e: log.error("You seem to be missing a modlist config option, which you probably wanted.") # loop forever irc.process_forever() # vi:tabstop=4:expandtab:autoindent # kate: indent-mode python;indent-width 4;replace-tabs on;