#!/usr/bin/env python3 # XMPP bot that mirrors chat between two MUC rooms import argparse import slixmpp import configparser CONFIG_PATH = "./config.ini" VERSION='0.1.0' def show_version(): print("XMPPmirror " + VERSION) print("License GPLv3+: GNU GPL version 3 or later ") print("This is free software: you are free to change and redistribute it.") print("There is NO WARRANTY, to the extent permitted by law.") class MUCBot(slixmpp.ClientXMPP): def __init__(self, jid, password, nick, room1, room2): slixmpp.ClientXMPP.__init__(self, jid, password) self.nick = nick self.room1 = room1 self.room2 = room2 self.add_event_handler("session_start", self.start) self.add_event_handler("groupchat_message", self.muc_message) async def start(self, event): await self.get_roster() self.send_presence() self.plugin['xep_0045'].join_muc(self.room1,self.nick) self.plugin['xep_0045'].join_muc(self.room2,self.nick) def muc_message(self, msg): rcpt=msg['from'].bare if self.room1 in str(msg['from']): rcpt=self.room2 if self.room2 in str(msg['from']): rcpt=self.room1 if msg['mucnick'] != self.nick: self.send_message(mto=rcpt,mbody="%s: %s" % (msg['mucnick'],msg['body']),mtype='groupchat') if __name__ == '__main__': argparser = argparse.ArgumentParser(description="XMPP bot that mirrors chat between two MUC rooms") argparser.add_argument("--version", dest="version", help="print version information and exit", action="store_true") args=argparser.parse_args() ## Version argument if args.version: show_version() exit() config = configparser.ConfigParser() config.read(CONFIG_PATH) JID = config.get('credentials', 'JID') PASSWORD = config.get('credentials', 'PASSWORD') NICK = config.get('credentials', 'NICK') ROOM1 = config.get('credentials', 'ROOM1') ROOM2 = config.get('credentials', 'ROOM2') xmpp = MUCBot(JID, PASSWORD, NICK, ROOM1, ROOM2) 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()