This repository has been archived on 2023-04-13. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
CloudBot/core/bot.py
2013-10-01 20:34:48 +13:00

89 lines
3 KiB
Python

import time
import logging
import re
import os
import sys
import config
import irc
def clean_name(n):
"""strip all spaces and capitalization"""
return re.sub('[^A-Za-z0-9_]+', '', n.replace(" ", "_"))
class Bot(object):
def __init__(self, name):
# basic variables
self.name = name
self.start_time = time.time()
# set up config and logging
self.setup()
self.logger.debug("Bot setup completed.")
# start IRC connections
self.connections = {}
self.connect()
def connect(self):
"""connect to all the networks defined in the bot config"""
for name, conf in self.config['connections'].iteritems():
# strip all spaces and capitalization from the connection name
name = clean_name(name)
self.logger.debug("({}) Creating connection to {}.".format(name, conf['server']))
if conf.get('ssl'):
self.connections[name] = irc.SSLIRC(name, conf['server'], conf['nick'], conf=conf,
port=conf.get('port', 6667), channels=conf['channels'],
ignore_certificate_errors=conf.get('ignore_cert', True))
self.logger.debug("({}) Created SSL connection.".format(name))
else:
self.connections[name] = irc.IRC(name, conf['server'], conf['nick'], conf=conf,
port=conf.get('port', 6667), channels=conf['channels'])
self.logger.debug("({}) Created connection.".format(name))
def setup(self):
"""create the logger and config objects"""
# logging
self.logger = self.get_logger()
self.logger.debug("Logging engine started.")
# data folder
self.data_dir = os.path.abspath('data/{}'.format(self.name))
if not os.path.exists(self.data_dir):
self.logger.debug("Data folder not found, creating.")
os.mkdir(os.path.abspath('data'))
os.mkdir(self.data_dir)
self.logger.debug("Created data folder.")
# config
self.config = self.get_config()
self.logger.debug("Config object created.")
self.config.load_config()
self.logger.debug("Config loaded.")
def get_config(self):
"""create and return the config object"""
return config.Config(self.name, self.logger)
def get_logger(self):
"""create and return the logger object"""
# create logger
logger = logging.getLogger(self.name)
logger.setLevel(logging.DEBUG)
# add a file handler
log_name = "{}.log".format(self.name)
fh = logging.FileHandler(log_name)
fh.setLevel(logging.DEBUG)
# create a formatter and set the formatter for the handler.
frmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
fh.setFormatter(frmt)
# add the Handler to the logger
logger.addHandler(fh)
return logger