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)
This commit is contained in:
Brian S. Stephan 2011-04-23 11:50:02 -05:00
parent 5885983afd
commit 0c5fe348dc
1 changed files with 30 additions and 0 deletions

View File

@ -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",