From 58d8e3fdbec97f70c1625fb3b2afc4c9ca61bdf7 Mon Sep 17 00:00:00 2001 From: Cristina Cochior Date: Mon, 11 Nov 2019 10:03:10 +0100 Subject: [PATCH] changed name --- transit.py | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 transit.py diff --git a/transit.py b/transit.py new file mode 100644 index 0000000..dae8f31 --- /dev/null +++ b/transit.py @@ -0,0 +1,108 @@ +import asyncio +import logging +import slixmpp +from getpass import getpass +from argparse import ArgumentParser +from slixmpp import ClientXMPP + +""" + This bot announces when someone enters or leaves the space. + On line 39, you can edit the message when someone enters by editing what goes after 'mbody="': + mbody="%s has just entered..." % (presence['muc']['nick']), + On line 45, you can edit the message when someone leaves by editing what goes after 'mbody="': + mbody="%s has just left..." % (presence['muc']['nick']), + + To run this bot, type the following command in your terminal: + python3 usher.py -d -j administratorbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n usherbot -p testing +""" + +class MUCBot(slixmpp.ClientXMPP): + + def __init__(self, jid, password, room, nick): + slixmpp.ClientXMPP.__init__(self, jid, password) + self.room = room + self.nick = nick + self.add_event_handler("session_start", self.start) + self.add_event_handler("muc::%s::got_online" % self.room, self.muc_online) + self.add_event_handler("muc::%s::got_offline" % self.room, self.muc_offline) + + def start(self, event): + self.get_roster() + self.send_presence() + self.plugin['xep_0045'].join_muc(self.room, + self.nick, + wait=True) + + def muc_online(self, presence): + if presence['muc']['nick'] != self.nick: + self.send_message(mto=presence['from'].bare, + mbody="%s has just entered..." % (presence['muc']['nick']), + mtype='groupchat') + + def muc_offline(self, presence): + if presence['muc']['nick'] != self.nick: + self.send_message(mto=presence['from'].bare, + mbody="%s has just left..." % (presence['muc']['nick']), + mtype='groupchat') + +if __name__ == '__main__': + # Setup the command line arguments. + parser = ArgumentParser() + + # Output verbosity options. + parser.add_argument("-q", "--quiet", help="set logging to ERROR", + action="store_const", dest="loglevel", + const=logging.ERROR, default=logging.INFO) + parser.add_argument("-d", "--debug", help="set logging to DEBUG", + action="store_const", dest="loglevel", + const=logging.DEBUG, default=logging.INFO) + + # JID and password options. + parser.add_argument("-j", "--jid", dest="jid", + help="JID to use") + parser.add_argument("-p", "--password", dest="password", + help="password to use") + parser.add_argument("-r", "--room", dest="room", + help="MUC room to join") + parser.add_argument("-n", "--nick", dest="nick", + help="MUC nickname") + + args = parser.parse_args() + + # Setup logging. + logging.basicConfig(level=args.loglevel, + format='%(levelname)-8s %(message)s') + + if args.jid is None: + args.jid = input("Username: ") + if args.password is None: + args.password = getpass("Password: ") + if args.room is None: + args.room = input("MUC room: ") + if args.nick is None: + args.nick = input("MUC nickname: ") + + # Setup the MUCBot and register plugins. Note that while plugins may + # have interdependencies, the order in which you register them does + # not matter. + xmpp = MUCBot(args.jid, args.password, args.room, args.nick) + xmpp.register_plugin('xep_0030') # Service Discovery + xmpp.register_plugin('xep_0045') # Multi-User Chat + xmpp.register_plugin('xep_0199') # XMPP Ping + + # Connect to the XMPP server and start processing XMPP stanzas. + xmpp.connect() + xmpp.process() + + +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2010 Nathanael C. Fritz + This file is part of Slixmpp. + + See the file LICENSE for copying permission. + https://lab.louiz.org/poezio/slixmpp/blob/master/LICENSE + + The code has been modified at various times, by various people. This version was edited for the Collective Conditions work session in Brussels, 2019, by Varia. + http://constantvzw.org/site/-Collective-Conditions,220-.html +"""