# System Imports
import string
# Twisted Imports
from twisted.words.service import WordsClient
from twisted.python.plugin import getPlugIns
from twisted.python.failure import Failure
from twisted.python import log
class BotBot(WordsClient):
## possibly generalizeable stuff
def receiveDirectMessage(self, senderName, messageText, metadata=None):
cmdline = string.split(messageText, ' ', 1)
if len(cmdline) == 1:
cmd, arg = cmdline[0], ''
else:
cmd, arg = cmdline
try:
getattr(self, "bot_%s" % cmd)(senderName, arg, metadata)
except:
f = Failure()
self.voice.directMessage(senderName, f.getBriefTraceback())
### utility bot commands
def bot_rebuild(self, sender, message, metadata):
self.loadBotList()
from twisted.words import botbot
from twisted.python.rebuild import rebuild
from twisted.python.reflect import namedModule
if message:
rebuild(namedModule(message))
else:
rebuild(botbot)
def bot_blowup(self, sender, message, metadata):
self.voice.directMessage(sender, "I am blowing up.")
raise Exception("Kaboom!")
## setup stuff
def setupBot(self, voice):
self.voice = voice
self.loadBotList()
def loadBotList(self):
botTypeList = getPlugIns("twisted.words.bot")
botTypes = {}
for bott in botTypeList:
botTypes[bott.botType] = bott
self.botTypes = botTypes
### botbot bot commands
def bot_tlist(self, sender, message, metadata):
self.voice.directMessage(sender,
string.join(self.botTypes.keys(), " "))
def bot_list(self, sender, message, metadata):
self.voice.directMessage(sender, "Bot List")
log.msg('starting bot list')
import traceback
try:
for bot in self.voice.service.bots:
self.voice.directMessage(sender, " - %s" % bot.voice.perspectiveName)
except:
traceback.print_exc(file=log.logfile)
log.msg('finished bot list')
self.voice.directMessage(sender, "End of Bot List")
log.msg('finished')
def bot_new(self, sender, message, metadata):
bottype, botname = string.split(message, ' ', 1)
self.voice.service.addBot(botname, self.botTypes[bottype].load().createBot())
self.voice.directMessage(sender, "Bot Created!")
def createBot():
return BotBot()
syntax highlighted by Code2HTML, v. 0.9.1