diff --git a/Database.py b/Database.py index a7a0b285..b274d577 100644 --- a/Database.py +++ b/Database.py @@ -83,6 +83,8 @@ class Database(object): values[i] = value[0], json.loads(value[1]) return values return default + def find_bot_settings_prefix(self, prefix, default=[]): + return self.find_bot_settings("%s%" % prefix, default) def del_bot_setting(self, setting): self.cursor().execute("""DELETE FROM bot_settings WHERE setting=?""", [setting.lower()]) @@ -109,6 +111,8 @@ class Database(object): values[i] = value[0], json.loads(value[1]) return values return default + def find_server_settings_prefix(self, server_id, prefix, default=[]): + return self.find_server_settings(server_id, "%s%" % prefix, default) def del_server_setting(self, server_id, setting): self.cursor().execute("""DELETE FROM server_settings WHERE server_id=? AND setting=?""", [server_id, setting.lower()]) @@ -132,9 +136,13 @@ class Database(object): values = self.cursor().fetchall() if values: for i, value in enumerate(values): - values[i] = json.loads(value) + values[i] = value[0], json.loads(value[1]) return values return default + def find_channel_settings_prefix(self, server_id, channel, prefix, + default=[]): + return self.find_channel_settings(server_id, channel, "%s%" % prefix, + default) def del_channel_setting(self, server_id, channel, setting): self.cursor().execute("""DELETE FROM channel_settings WHERE server_id=? AND channel=? AND setting=?""", [server_id, @@ -152,16 +160,30 @@ class Database(object): if value: return json.loads(value[0]) return default - def find_user_settings(self, server_id, nickname, pattern, default=[]): - self.cursor().execute("""SELECT setting, value FROM user_settings - WHERE server_id=? AND nickname=? setting LIKE '?'""", [server_id, - nickname.lower(), pattern.lower()]) + def get_all_user_settings(self, server_id, setting, default=[]): + self.cursor().execute("""SELECT nickname, setting, value FROM + user_settings WHERE server_id=? AND setting=?""", + [server_id, setting]) values = self.cursor().fetchall() if values: for i, value in enumerate(values): - values[i] = json.loads(value) + values[i] = value[0], value[1], json.loads(value[2]) return values return default + def find_user_settings(self, server_id, nickname, pattern, default=[]): + self.cursor().execute("""SELECT setting, value FROM user_settings + WHERE server_id=? AND nickname=? AND setting LIKE '?'""", + [server_id, nickname.lower(), pattern.lower()]) + values = self.cursor().fetchall() + if values: + for i, value in enumerate(values): + values[i] = value[0], json.loads(value[1]) + return values + return default + def find_user_settings_prefix(self, server_id, nickname, prefix, + default=[]): + return self.find_user_settings(server_id, nickname, "%s%" % prefix, + default) def del_user_setting(self, server_id, nickname, setting): self.cursor().execute("""DELETE FROM user_settings WHERE server_id=? AND nickname=? AND setting=?""", [server_id, diff --git a/IRCBot.py b/IRCBot.py index 1108aaf6..6d580ffd 100644 --- a/IRCBot.py +++ b/IRCBot.py @@ -105,6 +105,9 @@ class Bot(object): return self.database.get_bot_setting(setting, default) def find_settings(self, pattern, default=[]): return self.database.find_bot_settings(pattern, default) + def find_settings_prefix(self, prefix, default=[]): + return self.database.find_bot_settings_prefix( + prefix, default) def del_setting(self, setting): self.database.del_bot_setting(setting) diff --git a/IRCChannel.py b/IRCChannel.py index f92d1b43..07208725 100644 --- a/IRCChannel.py +++ b/IRCChannel.py @@ -73,8 +73,11 @@ class Channel(object): return self.bot.database.get_channel_setting( self.server.id, self.name, setting, default) def find_settings(self, pattern, default=[]): - return self.bot.database.find_channel_setting( + return self.bot.database.find_channel_settings( self.server.id, self.name, pattern, default) + def find_settings_prefix(self, prefix, default=[]): + return self.bot.database.find_channel_settings_prefix( + self.server.id, self.name, prefix, default) def del_setting(self, setting): self.bot.database.del_channel_setting(self.server.id, self.name, setting) diff --git a/IRCServer.py b/IRCServer.py index 56fd6823..d4d6f66d 100644 --- a/IRCServer.py +++ b/IRCServer.py @@ -93,8 +93,14 @@ class Server(object): def find_settings(self, pattern, default=[]): return self.bot.database.find_server_settings(self.id, pattern, default) + def find_settings_prefix(self, prefix, default=[]): + return self.bot.database.find_server_settings_prefix( + self.id, prefix, default) def del_setting(self, setting): self.bot.database.del_server_setting(self.id, setting) + def get_all_user_settings(self, setting, default): + return self.bot.database.get_all_user_settings(self.id, setting, + default) def set_own_nickname(self, nickname): self.nickname = nickname diff --git a/IRCUser.py b/IRCUser.py index 64254a97..b0696930 100644 --- a/IRCUser.py +++ b/IRCUser.py @@ -29,6 +29,9 @@ class User(object): def find_settings(self, pattern, default=[]): return self.bot.database.find_user_settings(self.server.id, self.nickname, pattern, default) + def find_settings_prefix(self, prefix, default=[]): + return self.bot.database.find_user_settings_prefix( + self.server.id, self.nickname, prefix, default) def del_setting(self, setting): self.bot.database.del_user_setting(self.server.id, self.nickname, setting)