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