49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
"""Watch channel topics for changes and note them."""
|
|
|
|
import logging
|
|
|
|
from django.utils import timezone
|
|
|
|
from ircbot.lib import Plugin
|
|
from ircbot.models import IrcChannel
|
|
|
|
|
|
log = logging.getLogger('ircbot.ircplugins.topicmonitor')
|
|
|
|
|
|
class TopicMonitor(Plugin):
|
|
|
|
"""Have IRC commands to do IRC things (join channels, quit, etc.)."""
|
|
|
|
def start(self):
|
|
"""Set up the handlers."""
|
|
|
|
self.connection.reactor.add_global_handler('topic', handle_topic, -20)
|
|
|
|
super(TopicMonitor, self).start()
|
|
|
|
def stop(self):
|
|
"""Tear down handlers."""
|
|
|
|
self.connection.reactor.remove_global_handler('topic', handle_topic)
|
|
|
|
super(TopicMonitor, self).stop()
|
|
|
|
|
|
def handle_topic(connection, event):
|
|
"""Store topic changes in the channel model."""
|
|
|
|
channel = event.target
|
|
topic = event.arguments[0]
|
|
setter = event.source
|
|
log.debug("topic change '%s' by %s in %s", topic, setter, channel)
|
|
|
|
channel, c = IrcChannel.objects.get_or_create(name=channel)
|
|
channel.topic_msg = topic
|
|
channel.topic_time = timezone.now()
|
|
channel.topic_by = setter
|
|
channel.save()
|
|
|
|
|
|
plugin = TopicMonitor
|