Browse Source

Modifying all plugins to use the new structure

Kirk Trombley 5 years ago
parent
commit
bd8f22c289

+ 2 - 1
.gitignore

@@ -1,5 +1,6 @@
 secrets.toml
-__pycache__/*
+**/__pycache__/*
 *.pyc
 .venv
 .vscode/
+**/*.egg-info/*

+ 0 - 0
rollbot/rollbot/__init__.py → lib/rollbot/__init__.py


+ 2 - 1
rollbot/rollbot/bot.py → lib/rollbot/bot.py

@@ -1,7 +1,8 @@
 import logging
 import time
 
-from command_system import RollbotResponse, RollbotFailure, as_plugin
+from .messaging import RollbotResponse, RollbotFailure
+from .plugins import as_plugin
 
 
 def lift_response(call, response):

+ 0 - 0
rollbot/rollbot/database.py → lib/rollbot/database.py


+ 0 - 0
rollbot/rollbot/messaging.py → lib/rollbot/messaging.py


+ 8 - 0
rollbot/rollbot/plugins.py → lib/rollbot/plugins.py

@@ -1,5 +1,6 @@
 import logging
 import inspect
+from functools import reduce
 
 from .messaging import RollbotResponse
 
@@ -20,6 +21,13 @@ class RollbotPlugin:
     def on_command(self, db, message):
         raise NotImplementedError
 
+    @staticmethod
+    def find_all_plugins():
+        def get_subclasses(clazz):
+            s = set(clazz.__subclasses__())
+            return s | reduce(set.union, (get_subclasses(sc) for sc in s), set())
+        return get_subclasses(RollbotPlugin)
+
 
 def as_plugin(command):
     if isinstance(command, str):

+ 12 - 0
lib/setup.py

@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+
+from distutils.core import setup
+
+setup(
+    name="rollbot",
+    version="3.0.0",
+    description="Rollbot framework library",
+    author="Kirk Trombley",
+    author_email="ktrom3894@gmail.com",
+    packages=["rollbot"],
+)

+ 6 - 1
rollbot-local.sh

@@ -1,5 +1,10 @@
 #!/usr/bin/env bash
 
+[ -f .venv/bin/activate ] || python3 -mvenv .venv
+source .venv/bin/activate
+pip3 install -r requirements.txt
+pip3 install -e lib/
 pushd src/
-ROLLBOT_CFG_DIR=../config python3 app.py
+ROLLBOT_CFG_DIR=../config python3 groupme_bot.py
 popd
+deactivate

+ 0 - 0
rollbot/setup.py


+ 2 - 1
src/db.py

@@ -3,8 +3,9 @@ from contextlib import contextmanager
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker, scoped_session
 
+from rollbot import ModelBase
+
 from config import DB_FILE
-from command_system import ModelBase
 
 
 engine = create_engine("sqlite:///" + DB_FILE)

+ 5 - 5
src/discord_bot.py

@@ -6,12 +6,12 @@ import atexit
 import discord
 import discord.utils
 
+from rollbot import Rollbot, RollbotMessage, RollbotPlugin
+
+import plugins
+
 import db
-from util import find_all_subclasses
 from config import get_config, get_secret
-from rollbot import Rollbot
-from command_system import RollbotMessage, RollbotPlugin
-import plugins
 
 dictConfig({
     'version': 1,
@@ -42,7 +42,7 @@ msg_queue = []
 
 rollbot = Rollbot(
     logger=logging,
-    plugin_classes=find_all_subclasses(RollbotPlugin),
+    plugin_classes=RollbotPlugin.find_all_plugins(),
     aliases=get_config("aliases"),
     responses=get_config("responses"),
     callback=lambda msg, channel_id: msg_queue.append((msg, discord.utils.get(client.get_all_channels(), id=int(channel_id)))),

+ 20 - 6
src/app.py → src/groupme_bot.py

@@ -3,13 +3,14 @@ from logging.config import dictConfig
 from threading import Thread
 
 from flask import Flask, request
+import requests
+
+from rollbot import Rollbot, RollbotMessage, RollbotPlugin
+
+import plugins
 
 import db
 from config import BOTS_LOOKUP, get_config, get_secret
-from command_system import RollbotMessage, RollbotPlugin
-from rollbot import Rollbot
-from util import post_groupme_message, find_all_subclasses
-import plugins
 
 GLOBAL_ADMINS = get_secret("auths.global")
 GROUP_ADMINS = get_secret("auths.group")
@@ -30,15 +31,28 @@ dictConfig({
     }
 })
 
+
+def post_groupme_message(msg, group_id):
+    bot_id = BOTS_LOOKUP[group_id]
+    requests.post(
+        "https://api.groupme.com/v3/bots/post",
+        json={
+            "bot_id": bot_id,
+            "text": msg
+        },
+        timeout=10
+    )
+
+
 app = Flask(__name__)
 app.config["PROPAGATE_EXCEPTIONS"] = True
 rollbot = Rollbot(
     logger=app.logger,
-    plugin_classes=find_all_subclasses(RollbotPlugin),
+    plugin_classes=RollbotPlugin.find_all_plugins(),
     aliases=get_config("aliases"),
     responses=get_config("responses"),
     sleep_time=float(get_config("sleep_time")),
-    callback=lambda msg, group_id: post_groupme_message(msg, BOTS_LOOKUP[group_id]),
+    callback=post_groupme_message,
     session_factory=db.session_scope
 )
 app.logger.info("Initializing database tables")

+ 2 - 1
src/plugins/curse.py

@@ -2,7 +2,8 @@ import logging
 
 from sqlalchemy import Column, Integer, String
 
-from command_system import RollbotResponse, RollbotFailure, RollbotPlugin, as_plugin, ModelBase, pop_arg
+from rollbot import RollbotResponse, RollbotFailure, RollbotPlugin, as_plugin, ModelBase, pop_arg
+
 from config import get_secret
 
 

+ 1 - 1
src/plugins/finchat.py

@@ -1,4 +1,4 @@
-from command_system import as_plugin, RollbotResponse
+from rollbot import as_plugin, RollbotResponse
 
 
 Fs = """

+ 2 - 1
src/plugins/hangguy.py

@@ -4,7 +4,8 @@ import base64
 
 from sqlalchemy import Column, Integer, String, DateTime
 
-from command_system import as_plugin, RollbotResponse, RollbotFailure, ModelBase, pop_arg
+from rollbot import as_plugin, RollbotResponse, RollbotFailure, ModelBase, pop_arg
+
 from config import get_secret
 
 

+ 1 - 1
src/plugins/meme.py

@@ -1,6 +1,6 @@
 import random
 
-from command_system import as_plugin
+from rollbot import as_plugin
 
 @as_plugin
 def meme():

+ 4 - 2
src/plugins/querying.py

@@ -5,9 +5,11 @@ import time
 import requests
 from requests_html import HTMLSession
 
-from command_system import RollbotResponse, RollbotFailure, as_plugin, pop_arg
+from rollbot import RollbotResponse, RollbotFailure, as_plugin, pop_arg
+
 from config import get_config, get_secret
-from util import upload_image
+
+from .util import upload_image
 
 @as_plugin
 def inspire(message):

+ 1 - 1
src/plugins/roll.py

@@ -1,6 +1,6 @@
 import dice
 
-from command_system import as_plugin
+from rollbot import as_plugin
 
 
 @as_plugin

+ 1 - 1
src/plugins/session.py

@@ -2,7 +2,7 @@ import datetime
 
 from sqlalchemy import Column, Integer, String, DateTime
 
-from command_system import RollbotResponse, RollbotFailure, as_plugin, ModelBase, pop_arg
+from rollbot import RollbotResponse, RollbotFailure, as_plugin, ModelBase, pop_arg
 
 
 class DnDSession(ModelBase):

+ 5 - 2
src/plugins/seychelles.py

@@ -4,10 +4,13 @@ import os
 
 from PIL import Image
 
-from command_system import RollbotResponse, RollbotFailure, as_plugin
-from util import upload_image
+from rollbot import RollbotResponse, RollbotFailure, as_plugin
+
 from config import get_secret
 
+from .util import upload_image
+
+
 
 @as_plugin
 def seychelles(message):

+ 1 - 1
src/plugins/simple.py

@@ -1,6 +1,6 @@
 import random
 
-from command_system import as_plugin
+from rollbot import as_plugin
 
 
 @as_plugin

+ 3 - 1
src/plugins/teamspeak.py

@@ -1,7 +1,9 @@
 import logging
 
 import requests
-from command_system import RollbotResponse, RollbotPlugin, as_plugin
+
+from rollbot import RollbotResponse, RollbotPlugin, as_plugin
+
 from config import get_secret
 
 TS3_QUERY = get_secret("teamspeak.query")

+ 1 - 1
src/plugins/the_guy.py

@@ -1,4 +1,4 @@
-from command_system import RollbotResponse, RollbotFailure, as_plugin
+from rollbot import RollbotResponse, RollbotFailure, as_plugin
 
 
 THE_GUY = """\

+ 1 - 1
src/plugins/the_house.py

@@ -1,4 +1,4 @@
-from command_system import as_plugin
+from rollbot import as_plugin
 
 housetop = """\
 ┏┓

+ 0 - 20
src/util.py → src/plugins/util.py

@@ -1,21 +1,8 @@
-from functools import reduce
 from json.decoder import JSONDecodeError
 
 import requests
 from requests.exceptions import ConnectionError
 
-
-def post_groupme_message(msg, bot_id):
-    requests.post(
-        "https://api.groupme.com/v3/bots/post",
-        json={
-            "bot_id": bot_id,
-            "text": msg
-        },
-        timeout=10
-    )
-
-
 def upload_image(key, content):
     try:
         return True, requests.post(
@@ -35,10 +22,3 @@ def upload_image(key, content):
             "explain": "Could not parse response from image service.",
             "exception": e
         }
-
-
-def find_all_subclasses(baseClass):
-    def get_subclasses(clazz):
-        s = set(clazz.__subclasses__())
-        return s | reduce(set.union, (get_subclasses(sc) for sc in s), set())
-    return get_subclasses(baseClass)

+ 1 - 1
src/plugins/watchlist.py

@@ -1,7 +1,7 @@
 import pickle
 import random
 
-from command_system import as_plugin, as_group_singleton, pop_arg
+from rollbot import as_plugin, as_group_singleton, pop_arg
 
 @as_group_singleton
 class Watchlist:

+ 2 - 1
src/plugins/yell.py

@@ -4,7 +4,8 @@ import os.path
 from gtts import gTTS
 import requests
 
-from command_system import as_plugin
+from rollbot import as_plugin
+
 from config import get_secret
 
 YELL_ENDPOINT = get_secret("yell.endpoint")

+ 2 - 2
src/test_driver.py

@@ -2,8 +2,8 @@ import atexit
 import logging
 import os
 
-from rollbot import Rollbot
-from command_system import RollbotMessage
+from rollbot import Rollbot, RollbotMessage
+
 from config import BOTS_LOOKUP, DB_FILE, get_config
 
 try: