changes to whisper and greet

This commit is contained in:
Cristina Cochior 2019-11-10 23:29:54 +01:00
parent d7fb048f6b
commit b71f33ffee
2 changed files with 126 additions and 46 deletions

View File

@ -1,64 +1,36 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# To run this bot: """
# $ python3 logbot.py This bot greets every time it enters a room.
On line 33 you can change the code after "mbody=" to add your own greeting:
# You can define your own greetings when you enter the room; self.send_message(mto=self.room, mbody='collective conditions', mtype='groupchat')
# 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')
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 import logging
from getpass import getpass from getpass import getpass
from argparse import ArgumentParser from argparse import ArgumentParser
import slixmpp import slixmpp
import ssl, os, requests, urllib import ssl, os, requests, urllib
class MUCBot(slixmpp.ClientXMPP): 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) slixmpp.ClientXMPP.__init__(self, jid, password)
self.room = room self.room = room
self.nick = nick 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) 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): def start(self, event):
self.get_roster() self.get_roster()
self.send_presence() self.send_presence()
self.plugin['xep_0045'].join_muc(self.room, self.nick, wait=True)
# https://xmpp.org/extensions/xep-0045.html """You can add your message in mbody:"""
self.plugin['xep_0045'].join_muc(self.room, self.send_message(mto=self.room, mbody='a bot enters a chatroom', mtype='groupchat')
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')
if __name__ == '__main__': if __name__ == '__main__':
# Setup the command line arguments. # Setup the command line arguments.
@ -82,10 +54,6 @@ if __name__ == '__main__':
parser.add_argument("-n", "--nick", dest="nick", parser.add_argument("-n", "--nick", dest="nick",
help="MUC nickname") 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() args = parser.parse_args()
@ -101,13 +69,12 @@ if __name__ == '__main__':
args.room = input("MUC room: ") args.room = input("MUC room: ")
if args.nick is None: if args.nick is None:
args.nick = input("MUC nickname: ") 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 # Setup the MUCBot and register plugins. Note that while plugins may
# have interdependencies, the order in which you register them does # have interdependencies, the order in which you register them does
# not matter. # 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_0030') # Service Discovery
xmpp.register_plugin('xep_0045') # Multi-User Chat xmpp.register_plugin('xep_0045') # Multi-User Chat
xmpp.register_plugin('xep_0199') # XMPP Ping xmpp.register_plugin('xep_0199') # XMPP Ping
@ -118,3 +85,14 @@ if __name__ == '__main__':
xmpp.process() 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
"""

102
whisper.py Normal file
View File

@ -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
"""