101 lines
3.3 KiB
Python
101 lines
3.3 KiB
Python
|
###
|
||
|
# Copyright (c) 2011, xleave
|
||
|
# All rights reserved.
|
||
|
#
|
||
|
#
|
||
|
###
|
||
|
from threading import Event, Thread
|
||
|
import subprocess
|
||
|
import supybot.utils as utils
|
||
|
from supybot.commands import *
|
||
|
import supybot.plugins as plugins
|
||
|
import supybot.ircutils as ircutils
|
||
|
import supybot.callbacks as callbacks
|
||
|
import supybot.ircmsgs as ircmsgs
|
||
|
import re
|
||
|
|
||
|
raum_in_str = re.compile(".*(raum:|r:).*", re.I).match
|
||
|
raumstatus_is_open = re.compile("(raum: |r: )(auf|offen|open)", re.I).match
|
||
|
raumstatus_is_closed = re.compile("(raum: |r: )(zu|geschlossen|closed)", re.I).match
|
||
|
raumstatus_replace = re.compile("((raum: |r: ))[^ ]*", re.I).sub
|
||
|
|
||
|
class Raumstatus(callbacks.Plugin):
|
||
|
threaded = True
|
||
|
foo = "2"
|
||
|
def __init__(self, irc):
|
||
|
self.__parent = super(Raumstatus, self)
|
||
|
self.__parent.__init__(irc)
|
||
|
self.meinTimer = RepeatTimer(2, self.Bla, 0, [irc])
|
||
|
self.meinTimer.daemon = True
|
||
|
def start(self, irc, msg, args):
|
||
|
irc.reply("starting timer")
|
||
|
self.meinTimer.start()
|
||
|
irc.reply("MUST DESTROY UNIVERSE!!!")
|
||
|
start = wrap(start)
|
||
|
|
||
|
def stop(self, irc, msg, args):
|
||
|
irc.reply("stopping timer")
|
||
|
self.meinTimer.cancel()
|
||
|
irc.reply("FUCKED")
|
||
|
stop = wrap(stop)
|
||
|
|
||
|
def Bla(self, irc):
|
||
|
c = currentTopic = irc.state.getTopic(self.registryValue('channel'))
|
||
|
# import pdb;pdb.set_trace()
|
||
|
# c = currentTopic = irc.state.channels["#ccc.do"].topic
|
||
|
|
||
|
# raise Exception("%s %s %s %s"%("fuck you", type(c), dir(c), c))
|
||
|
# print "blabla %s " % self.registryValue('target')
|
||
|
ret = subprocess.call("ping -c6 -i .2 %s" % self.registryValue('target'),
|
||
|
shell=True,
|
||
|
stdout=open('/dev/null','w'),
|
||
|
stderr=subprocess.STDOUT)
|
||
|
x = raum_in_str(c)
|
||
|
if ret == 0:
|
||
|
if not x:
|
||
|
currentTopic = "Raum: auf | %s"%currentTopic
|
||
|
else:
|
||
|
if not raumstatus_is_open(currentTopic):
|
||
|
currentTopic = raumstatus_replace('\\1auf', currentTopic)
|
||
|
|
||
|
else:
|
||
|
if not x:
|
||
|
currentTopic = "Raum: zu | %s"%currentTopic
|
||
|
else:
|
||
|
if not raumstatus_is_closed(currentTopic):
|
||
|
currentTopic = raumstatus_replace('\\1zu', currentTopic)
|
||
|
|
||
|
if c != currentTopic:
|
||
|
irc.queueMsg(ircmsgs.topic(self.registryValue('channel'), currentTopic[:159]))
|
||
|
# irc.sendMsg(ircmsgs.privmsg("#ccc.do", "reset topic"))
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class RepeatTimer(Thread):
|
||
|
def __init__(self, interval, function, iterations=0, args=[], kwargs={}):
|
||
|
Thread.__init__(self)
|
||
|
self.interval = interval
|
||
|
self.function = function
|
||
|
self.iterations = iterations
|
||
|
self.args = args
|
||
|
self.kwargs = kwargs
|
||
|
self.finished = Event()
|
||
|
|
||
|
def run(self):
|
||
|
count = 0
|
||
|
while not self.finished.isSet() and (self.iterations <= 0 or count < self.iterations):
|
||
|
self.finished.wait(self.interval)
|
||
|
if not self.finished.isSet():
|
||
|
self.function(*self.args, **self.kwargs)
|
||
|
count += 1
|
||
|
|
||
|
def cancel(self):
|
||
|
self.finished.set()
|
||
|
|
||
|
Class = Raumstatus
|
||
|
|
||
|
|
||
|
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|