From b71f33ffeed84908dc25b038c9ce2e2c473009d5 Mon Sep 17 00:00:00 2001 From: Cristina Cochior Date: Sun, 10 Nov 2019 23:29:54 +0100 Subject: [PATCH] changes to whisper and greet --- greet.py | 70 +++++++++++++----------------------- whisper.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 46 deletions(-) create mode 100644 whisper.py diff --git a/greet.py b/greet.py index c642171..675519d 100644 --- a/greet.py +++ b/greet.py @@ -1,64 +1,36 @@ - - #!/usr/bin/env python3 # -*- coding: utf-8 -*- -# To run this bot: -# $ python3 logbot.py - -# You can define your own greetings when you enter the room; -# On line 59 you can change the code after "mbody=" to add your own message: -# self.send_message(mto=self.room, mbody='Let the dance begin!', mtype='groupchat') +""" + This bot greets every time it enters a room. + On line 33 you can change the code after "mbody=" to add your own greeting: + self.send_message(mto=self.room, mbody='collective conditions', mtype='groupchat') + To run this bot, type the following command in your terminal: + python3 greet.py -d -j administratorbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n greetbot -p testing +""" import logging from getpass import getpass from argparse import ArgumentParser - import slixmpp import ssl, os, requests, urllib class MUCBot(slixmpp.ClientXMPP): - """ - A simple Slixmpp bot that will save images - and messages that are marked with @bot to a folder. - """ - def __init__(self, jid, password, room, nick, output): + def __init__(self, jid, password, room, nick): slixmpp.ClientXMPP.__init__(self, jid, password) - self.room = room self.nick = nick - self.output = output - - # The session_start event will be triggered when - # the bot establishes its connection with the server - # and the XML logs are ready for use. We want tob - # listen for this event so that we we can initialize - # our roster. self.add_event_handler("session_start", self.start) - # The groupchat_message event is triggered whenever a message - # stanza is received from any chat room. If you also also - # register a handler for the 'message' event, MUC messages - # will be processed by both handlers. - self.add_event_handler("groupchat_message", self.muc_message) - - def start(self, event): self.get_roster() self.send_presence() + self.plugin['xep_0045'].join_muc(self.room, self.nick, wait=True) - # https://xmpp.org/extensions/xep-0045.html - self.plugin['xep_0045'].join_muc(self.room, - self.nick, - # If a room password is needed, use: - # password=the_room_password, - wait=True) - - # Greetings: when you enter the room send the message below: - self.send_message(mto=self.room, mbody='Let the dance begin!', mtype='groupchat') - + """You can add your message in mbody:""" + self.send_message(mto=self.room, mbody='a bot enters a chatroom', mtype='groupchat') if __name__ == '__main__': # Setup the command line arguments. @@ -82,10 +54,6 @@ if __name__ == '__main__': parser.add_argument("-n", "--nick", dest="nick", help="MUC nickname") - # output folder for images - parser.add_argument("-o", "--output", dest="output", - help="output folder, this is where the files are stored", - type=str) args = parser.parse_args() @@ -101,13 +69,12 @@ if __name__ == '__main__': args.room = input("MUC room: ") if args.nick is None: args.nick = input("MUC nickname: ") - if args.output is None: - args.output = input("Output folder: ") + # 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, args.output) + 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 @@ -118,3 +85,14 @@ if __name__ == '__main__': 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 for the Collective Conditions work session in Brussels, 2019, by Cristina Cochior and Joana Chicau. + http://constantvzw.org/site/-Collective-Conditions,220-.html +""" diff --git a/whisper.py b/whisper.py new file mode 100644 index 0000000..af8855b --- /dev/null +++ b/whisper.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" + This bot forwards messages it receives in private to the group channel it is part of. + On line 37 you can change the code after 'msg.reply("' to add your own message that will be sent to the person speaking to the bot: + msg.reply("Thank you for telling me this. I will pass it on to the chatroom." % msg).send() + On line 38 you can change the code after 'mbody="' to add your own message that will be sent to the group the bot is part of: + self.send_message(mto=self.room, mbody="This has been whispered to me:\n%(body)s" % msg, mtype='groupchat') + + To run this bot, type the following command in your terminal: + python3 whisper.py -j administratorbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n whisperbot -p testing +""" + +import logging +from getpass import getpass +from argparse import ArgumentParser +import slixmpp + + +class EchoBot(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("message", self.message) + + def start(self, event): + self.send_presence() + self.get_roster() + self.plugin['xep_0045'].join_muc(self.room, self.nick, wait=True) + + def message(self, msg): + if msg['type'] in ('chat', 'normal'): + msg.reply("Thank you for telling me this. I will pass it on to the chatroom." % msg).send() + self.send_message(mto=self.room, mbody="This has been whispered to me:\n%(body)s" % msg, mtype='groupchat') + + +if __name__ == '__main__': + # Setup the command line arguments. + parser = ArgumentParser(description=EchoBot.__doc__) + + # 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 EchoBot and register plugins. Note that while plugins may + # have interdependencies, the order in which you register them does + # not matter. + xmpp = EchoBot(args.jid, args.password, args.room, args.nick) + xmpp.register_plugin('xep_0030') # Service Discovery + xmpp.register_plugin('xep_0004') # Data Forms + xmpp.register_plugin('xep_0060') # PubSub + xmpp.register_plugin('xep_0199') # XMPP Ping + xmpp.register_plugin('xep_0066') # Process URI's (files, images) + xmpp.register_plugin('xep_0045') # Multi-User Chat + + # 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 for the Collective Conditions work session in Brussels, 2019, by Cristina Cochior and Joana Chicau. + http://constantvzw.org/site/-Collective-Conditions,220-.html +"""