database update

This commit is contained in:
deathbybandaid 2019-05-29 11:29:43 -04:00
parent 87e184131a
commit 3b41f58d90
4 changed files with 156 additions and 44 deletions

View File

@ -12,7 +12,7 @@ import threading
import spicemanip import spicemanip
from .Logs import logs from .Logs import logs
from .Database import botdb from .Database import db as botdb
class BotCommands(): class BotCommands():

View File

@ -44,4 +44,4 @@ class BotConfig():
return None return None
botconfig = BotConfig() config = BotConfig()

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals, absolute_import, division, print_functi
This is the SpiceBot Database This is the SpiceBot Database
""" """
from sopel.db import SopelDB
from sopel.tools import Identifier from sopel.tools import Identifier
import threading import threading
from .Config import config as botconfig
class BotDatabase(): class BotDatabase():
@ -14,7 +16,7 @@ class BotDatabase():
def __init__(self): def __init__(self):
self.lock = threading.Lock() self.lock = threading.Lock()
self.db = None self.db = SopelDB(botconfig.config)
self.dict = { self.dict = {
"nicks": {}, "nicks": {},
"channels": {}, "channels": {},
@ -22,18 +24,18 @@ class BotDatabase():
"""Nick""" """Nick"""
def get_nick_value(self, bot, nick, key, sorting_key='unsorted'): def get_nick_value(self, nick, key, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
nick = Identifier(nick) nick = Identifier(nick)
nick_id = bot.db.get_nick_id(nick, create=True) nick_id = self.db.get_nick_id(nick, create=True)
if nick_id not in self.dict["nicks"].keys(): if nick_id not in self.dict["nicks"].keys():
self.dict["nicks"][nick_id] = {} self.dict["nicks"][nick_id] = {}
if sorting_key not in self.dict["nicks"][nick_id].keys(): if sorting_key not in self.dict["nicks"][nick_id].keys():
self.dict["nicks"][nick_id][sorting_key] = bot.db.get_nick_value(nick, sorting_key) or dict() self.dict["nicks"][nick_id][sorting_key] = self.db.get_nick_value(nick, sorting_key) or dict()
self.lock.release() self.lock.release()
@ -42,55 +44,55 @@ class BotDatabase():
else: else:
return self.dict["nicks"][nick_id][sorting_key][key] return self.dict["nicks"][nick_id][sorting_key][key]
def set_nick_value(self, bot, nick, key, value, sorting_key='unsorted'): def set_nick_value(self, nick, key, value, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
nick = Identifier(nick) nick = Identifier(nick)
nick_id = bot.db.get_nick_id(nick, create=True) nick_id = self.db.get_nick_id(nick, create=True)
if nick_id not in self.dict["nicks"].keys(): if nick_id not in self.dict["nicks"].keys():
self.dict["nicks"][nick_id] = {} self.dict["nicks"][nick_id] = {}
if sorting_key not in self.dict["nicks"][nick_id].keys(): if sorting_key not in self.dict["nicks"][nick_id].keys():
self.dict["nicks"][nick_id][sorting_key] = bot.db.get_nick_value(nick, sorting_key) or dict() self.dict["nicks"][nick_id][sorting_key] = self.db.get_nick_value(nick, sorting_key) or dict()
self.dict["nicks"][nick_id][sorting_key][key] = value self.dict["nicks"][nick_id][sorting_key][key] = value
bot.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key]) self.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key])
self.lock.release() self.lock.release()
def delete_nick_value(self, bot, nick, key, sorting_key='unsorted'): def delete_nick_value(self, nick, key, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
nick = Identifier(nick) nick = Identifier(nick)
nick_id = bot.db.get_nick_id(nick, create=True) nick_id = self.db.get_nick_id(nick, create=True)
if nick_id not in self.dict["nicks"].keys(): if nick_id not in self.dict["nicks"].keys():
self.dict["nicks"][nick_id] = {} self.dict["nicks"][nick_id] = {}
if sorting_key not in self.dict["nicks"][nick_id].keys(): if sorting_key not in self.dict["nicks"][nick_id].keys():
self.dict["nicks"][nick_id][sorting_key] = bot.db.get_nick_value(nick, sorting_key) or dict() self.dict["nicks"][nick_id][sorting_key] = self.db.get_nick_value(nick, sorting_key) or dict()
del self.dict["nicks"][nick_id][sorting_key][key] del self.dict["nicks"][nick_id][sorting_key][key]
bot.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key]) self.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key])
self.lock.release() self.lock.release()
def adjust_nick_value(self, bot, nick, key, value, sorting_key='unsorted'): def adjust_nick_value(self, nick, key, value, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
nick = Identifier(nick) nick = Identifier(nick)
nick_id = bot.db.get_nick_id(nick, create=True) nick_id = self.db.get_nick_id(nick, create=True)
if nick_id not in self.dict["nicks"].keys(): if nick_id not in self.dict["nicks"].keys():
self.dict["nicks"][nick_id] = {} self.dict["nicks"][nick_id] = {}
if sorting_key not in self.dict["nicks"][nick_id].keys(): if sorting_key not in self.dict["nicks"][nick_id].keys():
self.dict["nicks"][nick_id][sorting_key] = bot.db.get_nick_value(nick, sorting_key) or dict() self.dict["nicks"][nick_id][sorting_key] = self.db.get_nick_value(nick, sorting_key) or dict()
if key not in self.dict["nicks"][nick_id][sorting_key].keys(): if key not in self.dict["nicks"][nick_id][sorting_key].keys():
oldvalue = [] oldvalue = []
@ -101,11 +103,11 @@ class BotDatabase():
self.dict["nicks"][nick_id][sorting_key][key] = value self.dict["nicks"][nick_id][sorting_key][key] = value
else: else:
self.dict["nicks"][nick_id][sorting_key][key] = oldvalue + value self.dict["nicks"][nick_id][sorting_key][key] = oldvalue + value
bot.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key]) self.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key])
self.lock.release() self.lock.release()
def adjust_nick_list(self, bot, nick, key, entries, adjustmentdirection, sorting_key='unsorted'): def adjust_nick_list(self, nick, key, entries, adjustmentdirection, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
@ -113,13 +115,13 @@ class BotDatabase():
entries = [entries] entries = [entries]
nick = Identifier(nick) nick = Identifier(nick)
nick_id = bot.db.get_nick_id(nick, create=True) nick_id = self.db.get_nick_id(nick, create=True)
if nick_id not in self.dict["nicks"].keys(): if nick_id not in self.dict["nicks"].keys():
self.dict["nicks"][nick_id] = {} self.dict["nicks"][nick_id] = {}
if sorting_key not in self.dict["nicks"][nick_id].keys(): if sorting_key not in self.dict["nicks"][nick_id].keys():
self.dict["nicks"][nick_id][sorting_key] = bot.db.get_nick_value(nick, sorting_key) or dict() self.dict["nicks"][nick_id][sorting_key] = self.db.get_nick_value(nick, sorting_key) or dict()
if key not in self.dict["nicks"][nick_id][sorting_key].keys(): if key not in self.dict["nicks"][nick_id][sorting_key].keys():
self.dict["nicks"][nick_id][sorting_key][key] = [] self.dict["nicks"][nick_id][sorting_key][key] = []
@ -132,23 +134,23 @@ class BotDatabase():
for entry in entries: for entry in entries:
while entry in self.dict["nicks"][nick_id][sorting_key][key]: while entry in self.dict["nicks"][nick_id][sorting_key][key]:
self.dict["nicks"][nick_id][sorting_key][key].remove(entry) self.dict["nicks"][nick_id][sorting_key][key].remove(entry)
bot.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key]) self.db.set_nick_value(nick, sorting_key, self.dict["nicks"][nick_id][sorting_key])
self.lock.release() self.lock.release()
"""Channels""" """Channels"""
def get_channel_value(self, bot, channel, key, sorting_key='unsorted'): def get_channel_value(self, channel, key, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
channel = Identifier(channel) channel = Identifier(channel).lower().lower()
if channel not in self.dict["channels"].keys(): if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {} self.dict["channels"][channel] = {}
if sorting_key not in self.dict["channels"][channel].keys(): if sorting_key not in self.dict["channels"][channel].keys():
self.dict["channels"][channel][sorting_key] = bot.db.get_channel_value(channel, sorting_key) or dict() self.dict["channels"][channel][sorting_key] = self.db.get_channel_value(channel, sorting_key) or dict()
self.lock.release() self.lock.release()
@ -157,51 +159,51 @@ class BotDatabase():
else: else:
return self.dict["channels"][channel][sorting_key][key] return self.dict["channels"][channel][sorting_key][key]
def set_channel_value(self, bot, channel, key, value, sorting_key='unsorted'): def set_channel_value(self, channel, key, value, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
channel = Identifier(channel) channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys(): if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {} self.dict["channels"][channel] = {}
if sorting_key not in self.dict["channels"][channel].keys(): if sorting_key not in self.dict["channels"][channel].keys():
self.dict["channels"][channel][sorting_key] = bot.db.get_channel_value(channel, sorting_key) or dict() self.dict["channels"][channel][sorting_key] = self.db.get_channel_value(channel, sorting_key) or dict()
self.dict["channels"][channel][sorting_key][key] = value self.dict["channels"][channel][sorting_key][key] = value
bot.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key]) self.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key])
self.lock.release() self.lock.release()
def delete_channel_value(self, bot, channel, key, sorting_key='unsorted'): def delete_channel_value(self, channel, key, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
channel = Identifier(channel) channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys(): if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {} self.dict["channels"][channel] = {}
if sorting_key not in self.dict["channels"][channel].keys(): if sorting_key not in self.dict["channels"][channel].keys():
self.dict["channels"][channel][sorting_key] = bot.db.get_channel_value(channel, sorting_key) or dict() self.dict["channels"][channel][sorting_key] = self.db.get_channel_value(channel, sorting_key) or dict()
del self.dict["channels"][channel][sorting_key][key] del self.dict["channels"][channel][sorting_key][key]
bot.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key]) self.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key])
self.lock.release() self.lock.release()
def adjust_channel_value(self, bot, channel, key, value, sorting_key='unsorted'): def adjust_channel_value(self, channel, key, value, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
channel = Identifier(channel) channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys(): if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {} self.dict["channels"][channel] = {}
if sorting_key not in self.dict["channels"][channel].keys(): if sorting_key not in self.dict["channels"][channel].keys():
self.dict["channels"][channel][sorting_key] = bot.db.get_channel_value(channel, sorting_key) or dict() self.dict["channels"][channel][sorting_key] = self.db.get_channel_value(channel, sorting_key) or dict()
if key not in self.dict["channels"][channel][sorting_key].keys(): if key not in self.dict["channels"][channel][sorting_key].keys():
oldvalue = None oldvalue = None
@ -212,24 +214,24 @@ class BotDatabase():
self.dict["channels"][channel][sorting_key][key] = value self.dict["channels"][channel][sorting_key][key] = value
else: else:
self.dict["channels"][channel][sorting_key][key] = oldvalue + value self.dict["channels"][channel][sorting_key][key] = oldvalue + value
bot.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key]) self.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key])
self.lock.release() self.lock.release()
def adjust_channel_list(self, bot, channel, key, entries, adjustmentdirection, sorting_key='unsorted'): def adjust_channel_list(self, channel, key, entries, adjustmentdirection, sorting_key='unsorted'):
self.lock.acquire() self.lock.acquire()
if not isinstance(entries, list): if not isinstance(entries, list):
entries = [entries] entries = [entries]
channel = Identifier(channel) channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys(): if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {} self.dict["channels"][channel] = {}
if sorting_key not in self.dict["channels"][channel].keys(): if sorting_key not in self.dict["channels"][channel].keys():
self.dict["channels"][channel][sorting_key] = bot.db.get_channel_value(channel, sorting_key) or dict() self.dict["channels"][channel][sorting_key] = self.db.get_channel_value(channel, sorting_key) or dict()
if key not in self.dict["channels"][channel][sorting_key].keys(): if key not in self.dict["channels"][channel][sorting_key].keys():
self.dict["channels"][channel][sorting_key][key] = [] self.dict["channels"][channel][sorting_key][key] = []
@ -242,9 +244,119 @@ class BotDatabase():
for entry in entries: for entry in entries:
while entry in self.dict["channels"][channel][sorting_key][key]: while entry in self.dict["channels"][channel][sorting_key][key]:
self.dict["channels"][channel][sorting_key][key].remove(entry) self.dict["channels"][channel][sorting_key][key].remove(entry)
bot.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key]) self.db.set_channel_value(channel, sorting_key, self.dict["channels"][channel][sorting_key])
self.lock.release()
"""Plugins"""
def get_plugin_value(self, plugin, key, sorting_key='unsorted'):
self.lock.acquire()
plugin = plugin.lower()
if plugin not in self.dict["plugins"].keys():
self.dict["plugins"][plugin] = {}
if sorting_key not in self.dict["plugins"][plugin].keys():
self.dict["plugins"][plugin][sorting_key] = self.db.get_plugin_value(plugin, sorting_key) or dict()
self.lock.release()
if key not in self.dict["plugins"][plugin][sorting_key].keys():
return None
else:
return self.dict["plugins"][plugin][sorting_key][key]
def set_plugin_value(self, plugin, key, value, sorting_key='unsorted'):
self.lock.acquire()
plugin = plugin.lower()
if plugin not in self.dict["plugins"].keys():
self.dict["plugins"][plugin] = {}
if sorting_key not in self.dict["plugins"][plugin].keys():
self.dict["plugins"][plugin][sorting_key] = self.db.get_plugin_value(plugin, sorting_key) or dict()
self.dict["plugins"][plugin][sorting_key][key] = value
self.db.set_plugin_value(plugin, sorting_key, self.dict["plugins"][plugin][sorting_key])
self.lock.release()
def delete_plugin_value(self, plugin, key, sorting_key='unsorted'):
self.lock.acquire()
plugin = plugin.lower()
if plugin not in self.dict["plugins"].keys():
self.dict["plugins"][plugin] = {}
if sorting_key not in self.dict["plugins"][plugin].keys():
self.dict["plugins"][plugin][sorting_key] = self.db.get_plugin_value(plugin, sorting_key) or dict()
del self.dict["plugins"][plugin][sorting_key][key]
self.db.set_plugin_value(plugin, sorting_key, self.dict["plugins"][plugin][sorting_key])
self.lock.release()
def adjust_plugin_value(self, plugin, key, value, sorting_key='unsorted'):
self.lock.acquire()
plugin = plugin.lower()
if plugin not in self.dict["plugins"].keys():
self.dict["plugins"][plugin] = {}
if sorting_key not in self.dict["plugins"][plugin].keys():
self.dict["plugins"][plugin][sorting_key] = self.db.get_plugin_value(plugin, sorting_key) or dict()
if key not in self.dict["plugins"][plugin][sorting_key].keys():
oldvalue = None
else:
oldvalue = self.dict["plugins"][plugin][sorting_key][key]
if not oldvalue:
self.dict["plugins"][plugin][sorting_key][key] = value
else:
self.dict["plugins"][plugin][sorting_key][key] = oldvalue + value
self.db.set_plugin_value(plugin, sorting_key, self.dict["plugins"][plugin][sorting_key])
self.lock.release()
def adjust_plugin_list(self, plugin, key, entries, adjustmentdirection, sorting_key='unsorted'):
self.lock.acquire()
if not isinstance(entries, list):
entries = [entries]
plugin = plugin.lower()
if plugin not in self.dict["plugins"].keys():
self.dict["plugins"][plugin] = {}
if sorting_key not in self.dict["plugins"][plugin].keys():
self.dict["plugins"][plugin][sorting_key] = self.db.get_plugin_value(plugin, sorting_key) or dict()
if key not in self.dict["plugins"][plugin][sorting_key].keys():
self.dict["plugins"][plugin][sorting_key][key] = []
if adjustmentdirection == 'add':
for entry in entries:
if entry not in self.dict["plugins"][plugin][sorting_key][key]:
self.dict["plugins"][plugin][sorting_key][key].append(entry)
elif adjustmentdirection == 'del':
for entry in entries:
while entry in self.dict["plugins"][plugin][sorting_key][key]:
self.dict["plugins"][plugin][sorting_key][key].remove(entry)
self.db.set_plugin_value(plugin, sorting_key, self.dict["plugins"][plugin][sorting_key])
self.lock.release() self.lock.release()
botdb = BotDatabase() db = BotDatabase()

View File

@ -13,7 +13,7 @@ import spicemanip
from .Tools import command_permissions_check from .Tools import command_permissions_check
from .Commands import commands from .Commands import commands
from .Database import botdb from .Database import db as botdb
class BotPrerun(): class BotPrerun():
@ -106,7 +106,7 @@ class BotPrerun():
# don't run commands that are disabled in channels # don't run commands that are disabled in channels
if not trigger.is_privmsg: if not trigger.is_privmsg:
disabled_list = botdb.get_channel_value(bot, trigger.sender, 'disabled_commands', 'commands') or {} disabled_list = botdb.get_channel_value(trigger.sender, 'disabled_commands', 'commands') or {}
if trigger.sb["realcom"] in disabled_list.keys(): if trigger.sb["realcom"] in disabled_list.keys():
reason = disabled_list[trigger.sb["realcom"]]["reason"] reason = disabled_list[trigger.sb["realcom"]]["reason"]
timestamp = disabled_list[trigger.sb["realcom"]]["timestamp"] timestamp = disabled_list[trigger.sb["realcom"]]["timestamp"]