]> kaliko git repositories - sid.git/blob - examples/rtbl.py
Fixed typo in rtbl bot example
[sid.git] / examples / rtbl.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 """
4 A MUC ban bot based on "Real-Time Block List" service.
5
6 Setup a virtualenv:
7
8 .. code:: bash
9     git clone -b dev https://gitlab.com/kaliko/sid.git && cd sid
10     python3 -m venv venv
11     . ./venv/bin/activate
12     pip install -U pip wheel
13     pip install slixmpp==1.8.3
14     cp examples/rtbl.py ./my-rtbl-bot.py
15
16
17 Run:
18
19 .. code:: bash
20     ./venv/bin/python3 my-rtbl-bot.py
21 """
22
23 import getpass
24 import logging
25
26 from argparse import ArgumentParser
27 from getpass import getpass
28
29 from sid.sid import MUCBot
30 from sid.ping import Ping
31 from sid.rtbl import RTBL
32
33
34 if __name__ == '__main__':
35     # Setup the command line arguments.
36     parser = ArgumentParser()
37
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)
45
46     # JID and password options.
47     parser.add_argument("-j", "--jid", dest="jid",
48                         help="JID to use")
49     parser.add_argument("-p", "--password", dest="password",
50                         help="password to use")
51     parser.add_argument("-r", "--room", dest="room",
52                         help="Room to join")
53     parser.add_argument("-n", "--nick", dest="nick",
54                         help="Bot nickname")
55     parser.add_argument("-b", "--rtbl", dest="rtbl",
56                         help="Real-Time Block List (RTBL) service to use (ie. xmppbl.org)")
57
58     args = parser.parse_args()
59
60     # Setup logging.
61     logging.basicConfig(level=args.loglevel,
62                         format='%(levelname)-8s %(message)s')
63
64     if args.jid is None:
65         args.jid = input("Username: ")
66     if args.password is None:
67         args.password = getpass("Password: ")
68     if args.room is None:
69         args.room = input("Room: ")
70     if args.nick is None:
71         args.nick = input("Bot nickname: ")
72     if args.rtbl is None:
73         args.rtbl = input("Real-Time Block List to use: ")
74
75     RTBL.pubsub_server = args.rtbl
76     # Instanciate the bot
77     xmpp = MUCBot(args.jid, args.password, args.room, args.nick)
78     # Register plugins
79     xmpp.register_bot_plugin(Ping)
80     xmpp.register_bot_plugin(RTBL)
81
82     # Connect to the XMPP server and start processing XMPP stanzas.
83     try:
84         xmpp.connect()
85         xmpp.process()
86     except KeyboardInterrupt:
87         xmpp.shutdown_plugins()