From 0c5fe348dcd9ddff061fac3837460998cedadf34 Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sat, 23 Apr 2011 11:50:02 -0500 Subject: [PATCH] Module: add timer support to modules modules that want to create a timer should implement timer_interval() to return a non-zero value (the timer interval, in seconds) and timer_do() (the method that does stuff) --- Module.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Module.py b/Module.py index f3036cd..eae5688 100644 --- a/Module.py +++ b/Module.py @@ -22,6 +22,7 @@ import inspect import re import sys import sqlite3 +from threading import Timer from extlib import irclib @@ -31,6 +32,11 @@ class Module(object): def priority(self): return 50 + def timer_interval(self): + """Run a timer-based event every N seconds (0 to disable).""" + + return 0 + def __init__(self, irc, config, server): """Construct a feature module. Inheritors can do special things here, but should be sure to call Module.__init__. @@ -54,6 +60,10 @@ class Module(object): # set up database for this module self.db_init() + # register the timer, if the implementing module has one + if self.timer_interval() > 0: + Timer(self.timer_interval(), self.timer_bootstrap, ()).start() + # print what was loaded, for debugging print("loaded " + self.__class__.__name__) @@ -216,6 +226,26 @@ class Module(object): print("looks like someone forgot to implement do!") + def timer_bootstrap(self): + """Run a thread that does something periodically. + + This only has real functionality if timer_interval() is + defined to return non-zero. + """ + + # don't actually do stuff if, since the last timer registration, + # the interval was set to 0 + if self.timer_interval() > 0: + self.timer_do() + + if self.timer_interval() > 0: + Timer(self.timer_interval(), self.timer_bootstrap, ()).start() + + def timer_do(self): + """If we're invoking the timer, do something (that you should implement).""" + + print("looks like someone forgot to implement timer_do!") + def help_description(self): """Return a quick list of commands or other summary, should be less than two lines. If you want the module hidden from "!help",