Ongoing collection of bots for the Bots of Conduct workshop. This repository will be gathering code written by many people during various moments (Relearn 2017, Relearn 2019, ongoing Varia work).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
4.1 KiB

#!/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
"""