#!/usr/bin/python3 import importlib from pathlib import Path from pprint import pprint import sys import time import random # List of loaded plugins loadedPlugins = [] # Temp lists to store plugin info tmpgenericHooks = [] tmpmessageHooks = [] tmpmentionHooks = [] # List of functions per hook genericHooks = [] messageHooks = [] mentionHooks = [] messages = [{"name":"1","message":"message1"}, {"name":"2","message":"message2"}, {"name":"3","message":"Hey @ben sup"}, {"name":"test","message":"Hello World"},{"name":"Ben","message":"@1 sup"}] def registerGenericHooks(): # Run this to run the registered hooks in a plugin for x in tmpgenericHooks: for y in x[1]: genericHooks.append(getattr(sys.modules[f"{x[0]}"], f"{y}")) def registerMessageHooks(): # Run this to run the registered hooks in a plugin for x in tmpmessageHooks: for y in x[1]: messageHooks.append(getattr(sys.modules[f"{x[0]}"], f"{y}")) def registerMentionHooks(): # Run this to run the registered hooks in a plugin for x in tmpmentionHooks: for y in x[1]: mentionHooks.append(getattr(sys.modules[f"{x[0]}"], f"{y}")) def buildHookList(): # Buld Generic hook lists for x in loadedPlugins: try: tmpgenericHooks.append(x.genericHooks()) tmpmessageHooks.append(x.messageHooks()) tmpmentionHooks.append(x.mentionHooks()) except AttributeError as e: print(f"{e}") # pprint(loadedPlugins) def loadPlugins(): p = Path("plugins/") files = [x for x in p.iterdir() if x.suffix == ".py"] for x in files: mod = x.stem loadedPlugins.append(importlib.import_module(f"plugins.{mod}")) for x in loadedPlugins: try: x.pluginStart() except AttributeError: print(f"{x.__name__} failed to load as there is no pluginStart method") def runGenericHooks(): for x in genericHooks: x() def runMessageHooks(msg): for x in messageHooks: x(msg) def runMentionHooks(msg): for x in mentionHooks: x(msg) def init(): loadPlugins() buildHookList() registerGenericHooks() registerMessageHooks() registerMentionHooks() # pprint(hooks) init() while True: runGenericHooks() msg = random.choice(messages) runMessageHooks(msg) if "@" in msg['message']: print("running mentions") runMentionHooks(msg) time.sleep(1)