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
from .Logs import logs
from .Database import botdb
from .Database import db as botdb
class BotCommands():

View File

@ -44,4 +44,4 @@ class BotConfig():
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
"""
from sopel.db import SopelDB
from sopel.tools import Identifier
import threading
from .Config import config as botconfig
class BotDatabase():
@ -14,7 +16,7 @@ class BotDatabase():
def __init__(self):
self.lock = threading.Lock()
self.db = None
self.db = SopelDB(botconfig.config)
self.dict = {
"nicks": {},
"channels": {},
@ -22,18 +24,18 @@ class BotDatabase():
"""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()
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():
self.dict["nicks"][nick_id] = {}
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()
@ -42,55 +44,55 @@ class BotDatabase():
else:
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()
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():
self.dict["nicks"][nick_id] = {}
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
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()
def delete_nick_value(self, bot, nick, key, sorting_key='unsorted'):
def delete_nick_value(self, nick, key, sorting_key='unsorted'):
self.lock.acquire()
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():
self.dict["nicks"][nick_id] = {}
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]
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()
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()
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():
self.dict["nicks"][nick_id] = {}
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():
oldvalue = []
@ -101,11 +103,11 @@ class BotDatabase():
self.dict["nicks"][nick_id][sorting_key][key] = value
else:
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()
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()
@ -113,13 +115,13 @@ class BotDatabase():
entries = [entries]
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():
self.dict["nicks"][nick_id] = {}
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():
self.dict["nicks"][nick_id][sorting_key][key] = []
@ -132,23 +134,23 @@ class BotDatabase():
for entry in entries:
while entry in self.dict["nicks"][nick_id][sorting_key][key]:
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()
"""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()
channel = Identifier(channel)
channel = Identifier(channel).lower().lower()
if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {}
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()
@ -157,51 +159,51 @@ class BotDatabase():
else:
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()
channel = Identifier(channel)
channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {}
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
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()
def delete_channel_value(self, bot, channel, key, sorting_key='unsorted'):
def delete_channel_value(self, channel, key, sorting_key='unsorted'):
self.lock.acquire()
channel = Identifier(channel)
channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {}
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]
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()
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()
channel = Identifier(channel)
channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {}
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():
oldvalue = None
@ -212,24 +214,24 @@ class BotDatabase():
self.dict["channels"][channel][sorting_key][key] = value
else:
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()
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()
if not isinstance(entries, list):
entries = [entries]
channel = Identifier(channel)
channel = Identifier(channel).lower()
if channel not in self.dict["channels"].keys():
self.dict["channels"][channel] = {}
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():
self.dict["channels"][channel][sorting_key][key] = []
@ -242,9 +244,119 @@ class BotDatabase():
for entry in entries:
while entry in self.dict["channels"][channel][sorting_key][key]:
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()
botdb = BotDatabase()
db = BotDatabase()

View File

@ -13,7 +13,7 @@ import spicemanip
from .Tools import command_permissions_check
from .Commands import commands
from .Database import botdb
from .Database import db as botdb
class BotPrerun():
@ -106,7 +106,7 @@ class BotPrerun():
# don't run commands that are disabled in channels
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():
reason = disabled_list[trigger.sb["realcom"]]["reason"]
timestamp = disabled_list[trigger.sb["realcom"]]["timestamp"]