diff --git a/sopel_modules/SpiceBot/AI.py b/sopel_modules/SpiceBot/AI.py index ccd0ea2..afa7dcd 100644 --- a/sopel_modules/SpiceBot/AI.py +++ b/sopel_modules/SpiceBot/AI.py @@ -13,6 +13,7 @@ import aiml from .Database import db as botdb from .Config import config as botconfig +from .Read import read as botread import spicemanip @@ -59,16 +60,7 @@ class SpiceBot_AI(): self.save_brain() def load_brain(self): - import sopel_modules - braindirs = [] - for plugin_dir in set(sopel_modules.__path__): - configsdir = os.path.join(plugin_dir, "SpiceBot_Configs") - aimldir = os.path.join(configsdir, "SpiceBot_AI") - braindirs.append(aimldir) - - if len(botconfig.SpiceBot_AI.extra): - for extrabraindir in botconfig.SpiceBot_AI.extra: - braindirs.append(extrabraindir) + braindirs = botread.get_config_dirs("SpiceBot_AI") # learn directories self.learn(braindirs) diff --git a/sopel_modules/SpiceBot/DictComs.py b/sopel_modules/SpiceBot/DictComs.py index d5325d7..e2b8467 100644 --- a/sopel_modules/SpiceBot/DictComs.py +++ b/sopel_modules/SpiceBot/DictComs.py @@ -6,20 +6,14 @@ This is the SpiceBot JSON Commands system. This Class stores commands in an easy to access manner """ -import os - from sopel.config.types import StaticSection, ListAttribute -import sopel_modules from .Config import config as botconfig from .Read import read as botread from .Commands import commands as botcommands -import spicemanip - import requests from fake_useragent import UserAgent -from lxml import html import urllib @@ -40,15 +34,7 @@ class BotJSONCommands(): "feeds", "search" ] - dir_to_scan = [] - for plugin_dir in set(sopel_modules.__path__): - configsdir = os.path.join(plugin_dir, "SpiceBot_Configs") - gifcfgdir = os.path.join(configsdir, "SpiceBot_DictComs") - dir_to_scan.append(gifcfgdir) - - if len(botconfig.SpiceBot_DictComs.extra): - for extragifcfgdir in botconfig.SpiceBot_DictComs.extra: - dir_to_scan.append(extragifcfgdir) + dir_to_scan = botread.get_config_dirs("SpiceBot_DictComs") valid_dictcom_dict = botread.json_to_dict(dir_to_scan, "Dictionary Commands", "SpiceBot_DictComs") diff --git a/sopel_modules/SpiceBot/Gif.py b/sopel_modules/SpiceBot/Gif.py index ca96b80..8b8cab0 100644 --- a/sopel_modules/SpiceBot/Gif.py +++ b/sopel_modules/SpiceBot/Gif.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals, absolute_import, division, print_functi """How to handle gifs""" from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute -import sopel_modules from .Config import config as botconfig from .Read import read as botread @@ -11,7 +10,6 @@ from .Commands import commands as botcommands import spicemanip -import os from fake_useragent import UserAgent import urllib import random @@ -36,15 +34,7 @@ class BotGif(): self.header = {'User-Agent': str(UserAgent().chrome)} self.valid_api = {} - dir_to_scan = [] - for plugin_dir in set(sopel_modules.__path__): - configsdir = os.path.join(plugin_dir, "SpiceBot_Configs") - gifcfgdir = os.path.join(configsdir, "SpiceBot_Gif") - dir_to_scan.append(gifcfgdir) - - if len(botconfig.SpiceBot_Gif.extra): - for extragifcfgdir in botconfig.SpiceBot_Gif.extra: - dir_to_scan.append(extragifcfgdir) + dir_to_scan = botread.get_config_dirs("SpiceBot_Gif") valid_gif_api_dict = botread.json_to_dict(dir_to_scan, "Gif API", "SpiceBot_Gif") diff --git a/sopel_modules/SpiceBot/Read.py b/sopel_modules/SpiceBot/Read.py index c23dda5..9d0ecb5 100644 --- a/sopel_modules/SpiceBot/Read.py +++ b/sopel_modules/SpiceBot/Read.py @@ -17,15 +17,27 @@ class BotRead(): def get_config_dirs(self, config_dir_name): dir_to_scan = [] + + # check config directory stored within this project for plugin_dir in set(sopel_modules.__path__): configsdir = os.path.join(plugin_dir, "SpiceBot_Configs") cfgdir = os.path.join(configsdir, config_dir_name) - dir_to_scan.append(cfgdir) + if os.path.exists(cfgdir) and os.path.isdir(cfgdir): + if len(os.listdir(cfgdir)) > 0: + dir_to_scan.append(cfgdir) - extradir = eval("botconfig." + config_dir_name) + # attempt to check for extra directories + try: + extradir = eval("botconfig." + config_dir_name + ".extra") + except Exception as e: + extradir = e + extradir = [] if len(extradir): for extracfgdir in extradir: - dir_to_scan.append(extracfgdir) + if os.path.exists(extracfgdir) and os.path.isdir(extracfgdir): + if len(os.listdir(extracfgdir)) > 0: + dir_to_scan.append(extracfgdir) + return dir_to_scan def json_to_dict(self, directories, configtypename="Config File", log_from='read_directory_json_to_dict', logging=True): diff --git a/sopel_modules/SpiceBot/Sherlock.py b/sopel_modules/SpiceBot/Sherlock.py index 2ae66ed..f525b13 100644 --- a/sopel_modules/SpiceBot/Sherlock.py +++ b/sopel_modules/SpiceBot/Sherlock.py @@ -2,27 +2,28 @@ from __future__ import unicode_literals, absolute_import, division, print_function """A way to search google""" -import sopel_modules +from sopel.config.types import StaticSection, ListAttribute from .Read import read as botread +from .Config import config as botconfig -import os from fake_useragent import UserAgent import requests import time +class SpiceBot_Sherlock_MainSection(StaticSection): + extra = ListAttribute('extra') + + class Sherlock(): def __init__(self): + self.setup_sherlock() self.header = {'User-Agent': str(UserAgent().chrome)} self.dict = {} - dir_to_scan = [] - for plugin_dir in set(sopel_modules.__path__): - configsdir = os.path.join(plugin_dir, "SpiceBot_Configs") - usercfgdir = os.path.join(configsdir, "SpiceBot_Sherlock") - dir_to_scan.append(usercfgdir) + dir_to_scan = botread.get_config_dirs("SpiceBot_Sherlock") valid_usernames_dict = botread.json_to_dict(dir_to_scan, "Sherlock", "SpiceBot_Sherlock") @@ -30,6 +31,9 @@ class Sherlock(): self.dict[social_network] = valid_usernames_dict[social_network] self.dict[social_network]["cache"] = dict() + def setup_sherlock(self): + botconfig.define_section("SpiceBot_Sherlock", SpiceBot_Sherlock_MainSection, validate=False) + def check_network(self, username, social_network): username = str(username).lower() diff --git a/sopel_modules/SpiceBot/configure.py b/sopel_modules/SpiceBot/configure.py index 473258b..9e59a47 100644 --- a/sopel_modules/SpiceBot/configure.py +++ b/sopel_modules/SpiceBot/configure.py @@ -10,6 +10,7 @@ from .Update import SpiceBot_Update_MainSection from .Gif import SpiceBot_Gif_MainSection from .DictComs import SpiceBot_DictComs_MainSection from .Reddit import SpiceBot_Reddit_MainSection +from .Sherlock import SpiceBot_Sherlock_MainSection from .Kick import SpiceBot_Kick from .osd import SpiceBot_OSD @@ -58,3 +59,6 @@ def configure(config): config.define_section("SpiceBot_DictComs", SpiceBot_DictComs_MainSection, validate=False) config.SpiceBot_DictComs.configure_setting('extra', 'SpiceBot_DictComs API Extra directory') + + config.define_section("SpiceBot_Sherlock", SpiceBot_Sherlock_MainSection, validate=False) + config.SpiceBot_Sherlock.configure_setting('extra', 'SpiceBot_Sherlock API Extra directory') diff --git a/sopel_modules/SpiceBot/setup.py b/sopel_modules/SpiceBot/setup.py index e3038b8..36a4c39 100644 --- a/sopel_modules/SpiceBot/setup.py +++ b/sopel_modules/SpiceBot/setup.py @@ -20,6 +20,7 @@ from .osd import SopelWrapperOSD, ToolsOSD, SopelOSD, SpiceBot_OSD from .Kick import SopelWrapperKICK, SopelKICK, SpiceBot_Kick from .Gif import SpiceBot_Gif_MainSection from .DictComs import SpiceBot_DictComs_MainSection +from .Sherlock import SpiceBot_Sherlock_MainSection from .AI import SpiceBot_AI_MainSection @@ -61,6 +62,8 @@ def setup(bot): setup_dictcoms(bot) + setup_sherlock(bot) + def setup_config(bot): logs.log('SpiceBot_Config', "Setting Up Configuration") @@ -159,3 +162,7 @@ def setup_reddit(bot): def setup_dictcoms(bot): bot.config.define_section("SpiceBot_DictComs", SpiceBot_DictComs_MainSection, validate=False) + + +def setup_sherlock(bot): + bot.config.define_section("SpiceBot_Sherlock", SpiceBot_Sherlock_MainSection, validate=False)