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.

114 lines
4.8 KiB

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This bot replies to a specific word.
On line 42, you can edit the word-to-be-responded-to after "if '":
if 'target-word' in msg['body']:
On line 44, you can edit the response options after "wordslist = ['":
wordslist = ['a response to the target-word.']
To run this bot, type the following command in your terminal:
python3 spark.py -d -j sparkbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n sparkbot -p testing
"""
import logging
from getpass import getpass
from argparse import ArgumentParser
import slixmpp
import random
import ssl, os, requests, urllib
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("groupchat_message", self.muc_message)
def start(self, event):
self.get_roster()
self.send_presence()
# https://xmpp.org/extensions/xep-0045.html
self.plugin['xep_0045'].join_muc(self.room, self.nick, wait=True)
def muc_message(self, msg):
if msg['mucnick'] != self.nick:
# Everytime someone types this word or expression, the bot replies. You can edit it here:
if 'collective' in msg['body']:
# The list of responses one line below can be expanded with the following format: ['text','text','text']
wordslist = ['conditions']
# The bot will respond with one of the options at random:
self.send_message(mto=self.room,mbody= random.choice(wordslist), 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")
# 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()
# Setup logging.
logging.basicConfig(level=args.loglevel,
format='%(levelname)-8s %(message)s')
if args.jid is None:
args.jid = input("XMPP address: ")
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
xmpp.register_plugin('xep_0066') # Process URI's (files, images)
# 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 Varia.
http://constantvzw.org/site/-Collective-Conditions,220-.html
"""