2 # -*- coding: utf-8 -*-
4 A MUC ban bot based on "Real-Time Block List" service.
9 git clone -b dev https://gitlab.com/kaliko/sid.git && cd sid
12 pip install -U pip wheel
13 pip install slixmpp==1.8.3
14 cp examples/rtbl.py ./my-rtbl-bot.py
20 ./venv/bin/python3 my-rtbl-bot.py
26 from argparse import ArgumentParser
27 from getpass import getpass
29 from sid.sid import MUCBot
30 from sid.ping import Ping
31 from sid.rtbl import RTBL
34 if __name__ == '__main__':
35 # Setup the command line arguments.
36 parser = ArgumentParser()
38 # Output verbosity options.
39 parser.add_argument("-q", "--quiet", help="set logging to ERROR",
40 action="store_const", dest="loglevel",
41 const=logging.ERROR, default=logging.INFO)
42 parser.add_argument("-d", "--debug", help="set logging to DEBUG",
43 action="store_const", dest="loglevel",
44 const=logging.DEBUG, default=logging.INFO)
46 # JID and password options.
47 parser.add_argument("-j", "--jid", dest="jid",
49 parser.add_argument("-p", "--password", dest="password",
50 help="password to use")
51 parser.add_argument("-r", "--room", dest="room",
53 parser.add_argument("-n", "--nick", dest="nick",
55 parser.add_argument("-b", "--rtbl", dest="rtbl",
56 help="Real-Time Block List (RTBL) service to use (ie. xmppbl.org)")
58 args = parser.parse_args()
61 logging.basicConfig(level=args.loglevel,
62 format='%(levelname)-8s %(message)s')
65 args.jid = input("Username: ")
66 if args.password is None:
67 args.password = getpass("Password: ")
69 args.room = input("Room: ")
71 args.nick = input("Bot nickname: ")
73 args.rtbl = input("Real-Time Block List to use: ")
75 RTBL.pubsub_server = args.rtbl
77 xmpp = MUCBot(args.jid, args.password, args.room, args.nick)
79 xmpp.register_bot_plugin(Ping)
80 xmpp.register_bot_plugin(RTBL)
82 # Connect to the XMPP server and start processing XMPP stanzas.
86 except KeyboardInterrupt:
87 xmpp.shutdown_plugins()