Merge branch 'master' of ssh://vvvvvvaria.org:12345/varia/bots

This commit is contained in:
manetta 2021-01-22 00:16:31 +01:00
commit 4a9ab63635
10 changed files with 647 additions and 0 deletions

13
GlossBot/README.md Normal file
View File

@ -0,0 +1,13 @@
# GlossBot
This bot will add words and expressions to a file.
You can use this code in the chat by calling three different options in the chat:
"@glossary-add word": adds the word "word" in the list
"@glossary-drift": returns a term from the list that was selected by chance
"@glossary-all": returns a list of all the saved expressions.
To run this bot, type the following command in your terminal:
python3 gather.py -d -j gatherbot@conversejs.org -r muc_name@muc.vvvvvvaria.org -n gatherbot -p testing -o .

158
GlossBot/gather.py Normal file
View File

@ -0,0 +1,158 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This bot will add words and expressions to a file.
You can use this code in the chat by calling three different options in the chat:
"@glossary-add word": adds the word "word" in the list
"@glossary-drift": returns a term from the list that was selected by chance
"@glossary-all": returns a list of all the saved expressions.
To run this bot, type the following command in your terminal:
python3 gather.py -d -j gatherbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n gatherbot -p testing -o .
"""
import logging
from getpass import getpass
from argparse import ArgumentParser
import slixmpp
import ssl, os, requests, urllib
class MUCBot(slixmpp.ClientXMPP):
def __init__(self, jid, password, room, nick, output):
slixmpp.ClientXMPP.__init__(self, jid, password)
self.room = room
self.nick = nick
self.output = output
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,
# If a room password is needed, use:
# password=the_room_password,
wait=True)
def muc_message(self, msg):
if msg['mucnick'] != self.nick:
# Check if output folder exists
if not os.path.exists(self.output):
os.mkdir(self.output)
# adds words to a glossary file:
if '@glossary-add' in msg['body']:
# reply from the bot
self.send_message(mto=self.room, mbody="new word(s) added; language is in motion".format(msg['mucnick']), mtype='groupchat')
# Add message to log
message = '{}'.format(msg['body'].replace('@glossary-add',''))
log = 'glossary.txt'
log_path = os.path.join(self.output, log)
f = open(log_path, 'a+')
f.write(message+'\n')
f.close()
# retrieves all terms from the growing glossary file:
if '@glossary-all' in msg['body']:
file = open('glossary.txt', 'r')
filelist=[]
for line in file:
print(line)
filelist.append(line)
print(filelist)
self.send_message(mto=self.room, mbody= filelist, mtype='groupchat')
# retrieves a random term from the growing glossary file:
if '@glossary-drift' in msg['body']:
import random
file = open('glossary.txt', 'r')
filelist=[]
for line in file:
print(line)
filelist.append(line)
print(filelist)
self.send_message(mto=self.room, mbody= random.choice(filelist), 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: ")
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.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
"""

11
GreetBot/README.md Normal file
View File

@ -0,0 +1,11 @@
# GreetBot
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 greetbot@conversejs.org -r muc_name@muc.vvvvvvaria.org -n greetbot -p testing

98
GreetBot/greet.py Normal file
View File

@ -0,0 +1,98 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
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 greetbot@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):
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)
def start(self, event):
self.get_roster()
self.send_presence()
self.plugin['xep_0045'].join_muc(self.room, self.nick, wait=True)
"""You can add your message in mbody:"""
self.send_message(mto=self.room, mbody='nice to be here', 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("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
"""

14
SparkBot/README.md Normal file
View File

@ -0,0 +1,14 @@
# SparkBot
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 muc_name@muc.vvvvvvaria.org -n sparkbot -p testing

114
SparkBot/spark.py Normal file
View File

@ -0,0 +1,114 @@
#!/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 'connectivity' in msg['body']:
# The list of responses one line below can be expanded with the following format: ['text','text','text']
wordslist = ['What does this word even mean?']
# 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
"""

15
TransitBot/README.md Normal file
View File

@ -0,0 +1,15 @@
# TransitBot
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 transit.py -d -j transitbot@conversejs.org -r muc_name@muc.vvvvvvaria.org -n transitbot -p testing

108
TransitBot/transit.py Normal file
View File

@ -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 transit.py -d -j transitbot@conversejs.org -r botsofconduct@muc.vvvvvvaria.org -n transitbot -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
"""

14
WhisperBot/README.md Normal file
View File

@ -0,0 +1,14 @@
# WhisperBot
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 whisperbot@conversejs.org -r muc_name@muc.vvvvvvaria.org -n whisperbot -p testing

102
WhisperBot/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 whisperbot@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 Varia.
http://constantvzw.org/site/-Collective-Conditions,220-.html
"""