import os, re, hashlib, sys, traceback import asyncio import settings # Plexus is the main (pubsub) event bus that all gateways communicate through # There are three main events all should keep track of: # new_user: each gateway must emit this event for each native user before sending message events # message: a native user has sent a message OR edited one. all gateways should relay the message to their own native channels # message_delete: a native user has deleted a message. all gateways should delete the respective message in their own native channels class Plexus: def __init__(self): self.pubsub_callbacks = {} def sub(self, event_name, callback): if event_name not in self.pubsub_callbacks: self.pubsub_callbacks[event_name] = [] self.pubsub_callbacks[event_name].append(callback) def pub(self, event_name, *args): print(event_name, args) if event_name in self.pubsub_callbacks: for callback in self.pubsub_callbacks[event_name]: try: callback(*args) except: print(traceback.format_exc()) PLEXUS = Plexus() for name, data in settings.XMPPs.items(): import gateway_xmpp data["handler"] = gateway_xmpp.GatewayXMPP(PLEXUS, settings, name, data) for name, data in settings.DISCORDs.items(): import gateway_discord data["handler"] = gateway_discord.GatewayDiscord(PLEXUS, settings, name, data) for name, data in settings.MATRIXs.items(): import gateway_matrix data["handler"] = gateway_matrix.GatewayMatrix(PLEXUS, settings, name, data) PLEXUS.pub("ready") asyncio.get_event_loop().run_forever()