Browse Source

moving watcher rules to their own file in config/ so bot is easier to customize

tags/v0.1
Ben Kurtovic 13 years ago
parent
commit
b5ce2fa675
4 changed files with 41 additions and 23 deletions
  1. +0
    -2
      config/irc.py
  2. +33
    -0
      config/watcher.py
  3. +1
    -1
      irc/rc.py
  4. +7
    -20
      irc/watcher.py

+ 0
- 2
config/irc.py View File

@@ -19,8 +19,6 @@ REALNAME = "[[w:en:User:EarwigBot]]"


# channels to join on main server's startup # channels to join on main server's startup
CHANS = ["##earwigbot", "##earwig", "#wikipedia-en-afc"] CHANS = ["##earwigbot", "##earwig", "#wikipedia-en-afc"]
AFC_CHANS = ["#wikipedia-en-afc"] # report recent AfC changes/give AfC status messages upon join
BOT_CHANS = ["##earwigbot", "#wikipedia-en-afc"] # report edits containing "!earwigbot"


# hardcoded hostnames of users with certain permissions # hardcoded hostnames of users with certain permissions
OWNERS = ["wikipedia/The-Earwig"] # can use owner-only commands (!restart and !git) OWNERS = ["wikipedia/The-Earwig"] # can use owner-only commands (!restart and !git)


+ 33
- 0
config/watcher.py View File

@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-

# EarwigBot Configuration File
# This file contains rules for the bot's watcher component.

import re

AFC_CHANS = ["#wikipedia-en-afc"] # report recent AfC changes/give AfC status messages upon join
BOT_CHANS = ["##earwigbot", "#wikipedia-en-afc"] # report edits containing "!earwigbot"

def process(rc):
chans = set() # channels to report this message to
page_name = rc.page.lower()
if "!earwigbot" in rc.msg.lower():
chans.update(BOT_CHANS)
if re.match("wikipedia( talk)?:(wikiproject )?articles for creation", page_name):
chans.update(AFC_CHANS)
elif re.match("wikipedia( talk)?:files for upload", page_name):
chans.update(AFC_CHANS)
elif page_name.startswith("template:afc submission"):
chans.update(AFC_CHANS)
elif rc.flags == "delete" and re.match("deleted \"\[\[wikipedia( talk)?:(wikiproject )?articles for creation", rc.comment.lower()):
chans.update(AFC_CHANS)
elif rc.flags == "protect" and re.match("protected \"\[\[wikipedia( talk)?:(wikiproject )?articles for creation", rc.comment.lower()):
chans.update(AFC_CHANS)

return chans

+ 1
- 1
irc/rc.py View File

@@ -27,7 +27,7 @@ class RC:
self.page, self.flags, self.url, self.user, self.comment = page, flags, url, user, comment self.page, self.flags, self.url, self.user, self.comment = page, flags, url, user, comment


def pretty(self):
def get_pretty(self):
"""make a nice, colorful message from self.msg to send to the front-end""" """make a nice, colorful message from self.msg to send to the front-end"""
pretty = self.msg pretty = self.msg
return pretty return pretty

+ 7
- 20
irc/watcher.py View File

@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-


## Imports ## Imports
import re

from config.irc import * from config.irc import *
from config.watcher import *


from irc.connection import Connection from irc.connection import Connection
from irc.rc import RC from irc.rc import RC
@@ -48,23 +47,11 @@ def main(connection, f_conn):
if line[1] == "376": # Join the recent changes channel when we've finished starting up if line[1] == "376": # Join the recent changes channel when we've finished starting up
connection.join(WATCHER_CHAN) connection.join(WATCHER_CHAN)


def report(msg, chans):
"""send a message to a list of report channels on our front-end server"""
for chan in chans:
frontend_conn.say(chan, msg)

def check(rc): def check(rc):
"""check if we're supposed to report this message anywhere""" """check if we're supposed to report this message anywhere"""
page_name = rc.page.lower()
pretty_msg = rc.pretty()

if "!earwigbot" in rc.msg.lower():
report(pretty_msg, chans=BOT_CHANS)
if re.match("wikipedia( talk)?:(wikiproject )?articles for creation", page_name):
report(pretty_msg, chans=AFC_CHANS)
elif re.match("wikipedia( talk)?:files for upload", page_name):
report(pretty_msg, chans=AFC_CHANS)
elif page_name.startswith("template:afc submission"):
report(pretty_msg, chans=AFC_CHANS)
if rc.flags == "delete" and re.match("deleted \"\[\[wikipedia( talk)?:(wikiproject )?articles for creation", rc.comment.lower()):
report(pretty_msg, chans=AFC_CHANS)
results = process(rc) # process the message in config/watcher.py, and get a list of channels to send it to
if not results:
return
pretty = rc.get_pretty()
for chan in results:
frontend_conn.say(chan, pretty)

Loading…
Cancel
Save