Skip to content

API overview

Clam- edited this page Aug 20, 2011 · 10 revisions

Module comunication

Modules will define a mappings variable that holds an iterable of util.Mapping objects:

mappings = (Mapping(type=[listOfTypes], command=commandname, regex=compiledRegEx, function=functionname),)

The Mapping object:

	def __init__(self, type=None, command=None, regex=None, function = dummyfunc):  
		# type = [list of strings], command=string, regex=compiledRegExobject, function=a defined function that has the signature:  
		#	def dummyfunc(event, botinstance, dbqueue):  

The functionality and nature of types isn't well defined at this point.

The function used in the mapper object will be called when the conditions of the mapper are met:

  • When type is matched
  • When command is matched, or
  • When regex matches text

In that order (probably.)

The module function is passed 3 objects:
event

The event object:

class Event:  
	def __init__(self, type=None, args=None, data=None, user=None, channel=None, msg=None, modes=None, setting=None):  
		self.type = type  
		self.args = args  
		self.data = data #misc used for stuff like created(self, when), and myInfo(self, servername, version, umodes, cmodes), etc  
		#I wonder if we can merge args and data  
		#should use this for one of the kickee or kicker  
		self.user = user  
		self.channel = channel  
		self.msg = msg  
		self.modes = modes  
		self.setting = setting #True for + modes  

Some or none of these attributes will be defined depending on the type of event that is fired. See pyBBM.py source code for details.

botinstance

botinstance is the actual bot object. More specifically, it is a twisted protocol object (probably), you can call it's .msg() and other type of methods to do as you please.

dbqueue

dbqueue allows access to the internal BBM sqlite database.
You should put SQL "requests" (statements) onto the queue like so:

 dbqueue.put(query, returnq, params)  
 #or  
 dbqueue.put(query, returnq, params)  
 #if you aren't using param based query  

The query string will be passed to dbapi2.execute, and the resulting row(s) will be .put() onto the returnq which should be a Queue.Queue() object.
You should then returnq.get() the results. There will only ever be one item on the returnq.
It will either be a list of rows returned from the statement or "ERROR" (maybe)

Why doesn't this markdown work properly?

Clone this wiki locally