Workshops Language: en old.trollparty.org |
HackSupyHack SupybotThe first plugin prove that shows the ranking top pages at TikiWiki in the irc whit the command tikitoppages (a modification on http://supybot.com/documentation/help/tutorial/plugin-author-tutorial/tutorial-all-pages): TikiTopPages$ ls config.py __init__.py plugin.py README.txt test.py TikiTopPages/config.py import supybot.conf as conf import supybot.registry as registry def configure(advanced): from supybot.questions import expect, anything, something, yn conf.registerPlugin('TikiTopPages', True) TikiTopPages = conf.registerPlugin('TikiTopPages') TikiTopPages/plugin.py plugin.pyimport supybot.utils as utils from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.callbacks as callbacks import MySQLdb class Tdb: """Helper class to connect to database.""" def __init__(self): try: connection = MySQLdb.connect(host="localhost", user="tikiwiki", passwd="xxxxxxx", db="tikidb" ) cursor = connection.cursor() cursor.execute( "select `pageName`, `hits` from `tiki_pages` order by `hits` desc " ) except MySQLdb.OperationalError, message: errorMessage = "Error %d:\n%s" % (message[ 0 ], message[ 1 ] ) return else: self.data = cursor.fetchall() self.fields = cursor.description cursor.close() connection.close() class TikiTopPages(callbacks.Plugin): """This plugin shows the top pages at TikiWiki.""" def __init__(self, irc): self.__parent = super(TikiTopPages, self) self.__parent.__init__(irc) db = Tdb() lineas="" for row in range(len(db.data)): self.lineas=lineas+db.data[row][0]+"-->"+str(db.data[row][1])+"\n" def tikitoppages(self, irc, msg, args): """Returns the top pages.""" irc.reply(self.lineas) tikitoppages = wrap(tikitoppages) Class = TikiTopPages version 2I used your code but ran the supy-newplugin command, that generated a TikiTop.py file with everything in it. So I made a one-file plugin instead of a dir.### # Copyright (c) 2005, Dankajh, Mose # # ### """ Experimental plugin too request a tikiwiki database. """ import supybot __revision__ = "1.0" __author__ = "dankajh" __contributors__ = { } import supybot.conf as conf import supybot.utils as utils from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.privmsgs as privmsgs import supybot.registry as registry import supybot.callbacks as callbacks import MySQLdb def configure(advanced): from supybot.questions import expect, anything, something, yn conf.registerPlugin('TikiTop', True) conf.registerPlugin('TikiTop') # This is where your configuration variables (if any) should go. class Tdb: """Helper class to connect to database.""" def __init__(self, irc): try: connection = MySQLdb.connect(host="localhost", user="xxx", passwd="xxx", db="tiki_xxx" ) cursor = connection.cursor() cursor.execute( "select `pageName`, `hits` from `tiki_pages` order by `hits` desc limit 5" ) except MySQLdb.OperationalError, message: errorMessage = "Error %d:\n%s" % (message[ 0 ], message[ 1 ] ) return else: self.data = cursor.fetchall() self.fields = cursor.description cursor.close() connection.close() class TikiTop(callbacks.Privmsg): def tikitop(self, irc, msg, args): """Returns the top pages.""" db = Tdb(irc) lineas="" for row in range(len(db.data)): lineas = lineas + db.data[row][0] + " (" + str(db.data[row][1]) + ") - " irc.reply(lineas) tikitop = wrap(tikitop) Class = TikiTop # vim:set shiftwidth=2 tabstop=2 textwidth=120: Version 3I hacked further and reached some dirty result. That code should be enhanced it's noob work.### # Copyright (c) 2005, Dankajh, Mose # # ### """ Experimental plugin to request a tikiwiki database. """ import supybot __revision__ = "1.0" __author__ = "dankajh" __contributors__ = { } import supybot.conf as conf import supybot.utils as utils from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.privmsgs as privmsgs import supybot.registry as registry import supybot.callbacks as callbacks import supybot.webutils as webutils import MySQLdb def configure(advanced): from supybot.questions import expect, output, anything, something, yn conf.registerPlugin('Tiki', True) conf.registerPlugin('Tiki') class Tiki(callbacks.Privmsg): threaded = True def tiki(self, irc, msg, args, word): """Returns pages found.""" try: connection = MySQLdb.connect(host="localhost", user="xxx", passwd="xxx", db="tiki_xxx" ) cursor = connection.cursor() cursor.execute("select pageName, hits from tiki_pages where pageName like '%" + word + "%' order by pageName limit 3") except MySQLdb.OperationalError, message: irc.reply(errorMessage) else: data = cursor.fetchall() for row in range(len(data)): irc.reply( "http://caracas.trollparty.org/" + webutils.urlquote(data[row][0]) + " (" + str(data[row][1]) + " hits)") tiki = wrap(tiki, ['text']) Class = Tiki # vim:set shiftwidth=2 tabstop=2 textwidth=120: RequirementsItems' list that should be implemented as Tiki class' methods and corresponds to different queries to the TikiWiki DB:
Who works on it ?
Contributors to this page: dankajh
and
mose
. |
Upcoming events Last wiki comments
|