#!/usr/bin/python """ check_supybot_plugin -- ensure that a plugin is loaded by supybot. Run like: check_supybot_plugin --target fedmsg check_supybot_plugin --target koji --debug """ from __future__ import print_function from builtins import str from builtins import map import argparse import sys import socket import string import uuid def process_args(): parser = argparse.ArgumentParser() parser.add_argument( '-t', '--target', default=None, dest='target', help="Required. The plugin we're looking for." ) parser.add_argument( '-n', '--nick', default=None, dest='nick', help="NICK to use when connecting to freenode.", ) parser.add_argument( '-d', '--debug', default=False, action='store_true', help='Print out debug information.', dest='debug', ) parser.add_argument( '-H', '--host', default='irc.freenode.net', help='Host to connect to.', dest='host', ) parser.add_argument( '-p', '--port', default=6667, type=int, help='Host to connect to.', dest='port', ) return parser.parse_args() args = process_args() # Use a random nick so people can't mess with us if not args.nick: args.nick = 'nrpe-' + str(uuid.uuid4()).split('-')[0] name = "NRPE Bot" readbuffer = "" if not args.target: print("UNKNOWN: No 'target' specified.") sys.exit(3) args.target = args.target.lower() if args.debug: print("connecting to %s/%i" % (args.host, args.port)) try: s = socket.socket() s.connect((args.host, args.port)) if args.debug: print("as %s/%s (%s)" % (args.nick, args.nick, name)) s.send(("nick %s\r\n" % args.nick).encode()) s.send(("USER %s %s bla :%s\r\n" % (args.nick, args.host, name)).encode()) while 1: readbuffer = readbuffer+s.recv(1024).decode() temp = readbuffer.split("\n") readbuffer = temp.pop() for line in temp: line = line.rstrip() if args.debug: print(" * ", line) line = line.split() if line[1] == 'MODE': msg = "privmsg zodbot :list\r\n".encode() if args.debug: print("sending:") print(" ->", msg) s.send(msg) if line[0] == ':zodbot!supybot@fedora/bot/zodbot': if args.debug: print("Got our response..") plugins = list(map(str.lower, ' '.join(line[3:][1:]).split(', '))) if args.target in plugins: print("OK") s.send("QUIT".encode()) sys.exit(0) else: print("CRITICAL: %r not loaded by supybot" % args.target) s.send("QUIT".encode()) sys.exit(2) except Exception as e: print("UNKNOWN: ", str(e)) if args.debug: raise sys.exit(3)