diff --git a/DrBotIRC.py b/DrBotIRC.py new file mode 100644 index 0000000..5b4523c --- /dev/null +++ b/DrBotIRC.py @@ -0,0 +1,66 @@ +""" +DrBotIRC - customizations of irclib, for dr.botzo +Copyright (C) 2011 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 . +""" + +import socket + +from extlib import irclib + +class DrBotServerConnection(irclib.ServerConnection): + + """Subclass irclib's ServerConnection, in order to expand privmsg.""" + + def privmsg(self, target, text): + """Send a PRIVMSG command.""" + + splitter = "..." + + # split messages that are too long. Max length is 512. + # TODO: this does not properly handle when the hostname has been + # masked by the ircd + space = 512 - len('\r\n') - len('PRIVMSG ') - len(' :') - len(target) - len(self.nickname) - len('!') - len(self.username) - len('@') - len(socket.getfqdn()) + splitspace = space - (len(splitter) + 1) + + if len(text) > space: + times = 1 + + while len(text) > splitspace: + splitpos = text.rfind(' ', 0, splitspace) + splittext = text[0:splitpos] + ' ' + splitter + text = splitter + ' ' + text[splitpos+1:] + self.send_raw("PRIVMSG %s :%s" % (target, splittext)) + + times = times + 1 + if times >= 4: + return + + # done splitting + self.send_raw("PRIVMSG %s :%s" % (target, text)) + else: + self.send_raw("PRIVMSG %s :%s" % (target, text)) + +class DrBotIRC(irclib.IRC): + + """Subclass irclib's IRC, in order to create a DrBotServerConnection.""" + + def server(self): + c = DrBotServerConnection(self) + self.connections.append(c) + return c + +# vi:tabstop=4:expandtab:autoindent +# kate: indent-mode python;indent-width 4;replace-tabs on; diff --git a/dr.botzo.py b/dr.botzo.py index 66aa23e..8582db7 100644 --- a/dr.botzo.py +++ b/dr.botzo.py @@ -19,56 +19,17 @@ along with this program. If not, see . from ConfigParser import ConfigParser, NoSectionError, NoOptionError import os import re -import socket import sys import inspect import sqlite3 +import DrBotIRC from extlib import irclib modlist = [] moduleList = [ "Countdown", "Dice", "IrcAdmin", "GoogleTranslate", "Seen", "FactFile" ] modObjs = [] -class DrBotServerConnection(irclib.ServerConnection): - """Subclass irclib's ServerConnection, in order to expand privmsg.""" - - def privmsg(self, target, text): - """Send a PRIVMSG command.""" - splitter = "..." - - # split messages that are too long. Max length is 512. - # TODO: this does not properly handle when the hostname has been - # masked by the ircd - space = 512 - len('\r\n') - len('PRIVMSG ') - len(' :') - len(target) - len(self.nickname) - len('!') - len(self.username) - len('@') - len(socket.getfqdn()) - splitspace = space - (len(splitter) + 1) - - if len(text) > space: - times = 1 - - while len(text) > splitspace: - splitpos = text.rfind(' ', 0, splitspace) - splittext = text[0:splitpos] + ' ' + splitter - text = splitter + ' ' + text[splitpos+1:] - self.send_raw("PRIVMSG %s :%s" % (target, splittext)) - - times = times + 1 - if times >= 4: - return - - # done splitting - self.send_raw("PRIVMSG %s :%s" % (target, text)) - else: - self.send_raw("PRIVMSG %s :%s" % (target, text)) - -class DrBotIRC(irclib.IRC): - """Subclass irclib's IRC, in order to create a DrBotServerConnection.""" - - def server(self): - c = DrBotServerConnection(self) - self.connections.append(c) - return c - config_file = 'dr.botzo.cfg' # check argv if len(sys.argv) == 2: @@ -125,7 +86,7 @@ except NoSectionError: pass # the database doesn't need to exist # start up the IRC bot # create IRC and server objects and connect -irc = DrBotIRC() +irc = DrBotIRC.DrBotIRC() server = irc.server().connect(botserver, botport, botnick, botpass, botuser, botircname) # load features