Add "user_channel_settings" table in Database.py, for settings per user per
channel
This commit is contained in:
parent
6b1641c438
commit
28debfa919
2 changed files with 82 additions and 18 deletions
84
Database.py
84
Database.py
|
@ -17,6 +17,7 @@ class Database(object):
|
||||||
self.make_server_settings_table()
|
self.make_server_settings_table()
|
||||||
self.make_channel_settings_table()
|
self.make_channel_settings_table()
|
||||||
self.make_user_settings_table()
|
self.make_user_settings_table()
|
||||||
|
self.make_user_channel_settings_table()
|
||||||
|
|
||||||
def cursor(self):
|
def cursor(self):
|
||||||
if self._cursor == None:
|
if self._cursor == None:
|
||||||
|
@ -91,6 +92,35 @@ class Database(object):
|
||||||
PRIMARY KEY (server_id, nickname, setting))""")
|
PRIMARY KEY (server_id, nickname, setting))""")
|
||||||
except sqlite3.Error as e:
|
except sqlite3.Error as e:
|
||||||
pass
|
pass
|
||||||
|
def make_user_channel_settings_table(self):
|
||||||
|
try:
|
||||||
|
self.execute("""CREATE TABLE user_channel_settings
|
||||||
|
(server_id INTEGER, channel TEXT, nickname TEXT,
|
||||||
|
setting TEXT, value TEXT, FOREIGN KEY (server_id)
|
||||||
|
REFERENCES servers(server_id) ON DELETE CASCADE,
|
||||||
|
PRIMARY KEY (server_id, nickname, channel, setting))""")
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def add_server(self, hostname, port, password, ipv4, tls, nickname,
|
||||||
|
username=None, realname=None):
|
||||||
|
username = username or nickname
|
||||||
|
realname = realname or nickname
|
||||||
|
self.execute(
|
||||||
|
"""INSERT INTO servers (hostname, port, password, ipv4,
|
||||||
|
tls, nickname, username, realname) VALUES (
|
||||||
|
?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||||
|
[hostname, port, password, ipv4, tls, nickname, username, realname])
|
||||||
|
def get_servers(self):
|
||||||
|
return self.execute_fetchall(
|
||||||
|
"""SELECT server_id, hostname, port, password, ipv4,
|
||||||
|
tls, nickname, username, realname FROM servers""")
|
||||||
|
def get_server(self, id):
|
||||||
|
return self.execute_fetchone(
|
||||||
|
"""SELECT server_id, hostname, port, password, ipv4,
|
||||||
|
tls, nickname, username, realname FROM servers WHERE
|
||||||
|
server_id=?""",
|
||||||
|
[id])
|
||||||
|
|
||||||
def set_bot_setting(self, setting, value):
|
def set_bot_setting(self, setting, value):
|
||||||
self.execute(
|
self.execute(
|
||||||
|
@ -222,22 +252,40 @@ class Database(object):
|
||||||
server_id=? AND nickname=? AND setting=?""",
|
server_id=? AND nickname=? AND setting=?""",
|
||||||
[server_id, nickname.lower(), setting.lower()])
|
[server_id, nickname.lower(), setting.lower()])
|
||||||
|
|
||||||
def add_server(self, hostname, port, password, ipv4, tls, nickname,
|
def set_user_channel_setting(self, server_id, channel, nickname,
|
||||||
username=None, realname=None):
|
setting, value):
|
||||||
username = username or nickname
|
|
||||||
realname = realname or nickname
|
|
||||||
self.execute(
|
self.execute(
|
||||||
"""INSERT INTO servers (hostname, port, password, ipv4,
|
"""INSERT OR REPLACE INTO user_channel_settings VALUES
|
||||||
tls, nickname, username, realname) VALUES (
|
(?, ?, ?, ?, ?)""",
|
||||||
?, ?, ?, ?, ?, ?, ?, ?)""",
|
[server_id, channel.lower(), nickname.lower(), setting.lower(),
|
||||||
[hostname, port, password, ipv4, tls, nickname, username, realname])
|
json.dumps(value)])
|
||||||
def get_servers(self):
|
def get_user_channel_setting(self, server_id, channel, nickname,
|
||||||
return self.execute_fetchall(
|
setting, default=None):
|
||||||
"""SELECT server_id, hostname, port, password, ipv4,
|
value = self.execute_fetchone(
|
||||||
tls, nickname, username, realname FROM servers""")
|
"""SELECT value FROM user_channel_settings WHERE
|
||||||
def get_server(self, id):
|
server_id=? AND channel=? AND nickname=? and setting=?""",
|
||||||
return self.execute_fetchone(
|
[server_id, channel.lower(), nickname.lower(), setting.lower()])
|
||||||
"""SELECT server_id, hostname, port, password, ipv4,
|
if value:
|
||||||
tls, nickname, username, realname FROM servers WHERE
|
return json.loads(value[0])
|
||||||
server_id=?""",
|
return default
|
||||||
[id])
|
def find_user_channel_settings(self, server_id, channel, nickname,
|
||||||
|
pattern, default=[]):
|
||||||
|
values = self.cursor().execute(
|
||||||
|
"""SELECT setting, value FROM user_channel_settings WHERE
|
||||||
|
server_id=? AND channel=? AND nickname=? AND setting LIKE '?'""",
|
||||||
|
[server_id, channel.lower(), nickname.lower(), pattern.lower()])
|
||||||
|
if values:
|
||||||
|
for i, value in enumerate(values):
|
||||||
|
values[i] = value[0], json.loads(value[1])
|
||||||
|
return values
|
||||||
|
return default
|
||||||
|
def find_user_channel_settings_prefix(self, server_id, channel, nickname,
|
||||||
|
prefix, default=[]):
|
||||||
|
return self.find_user_settings(server_id, nickname, "%s%" % prefix,
|
||||||
|
default)
|
||||||
|
def del_user_channel_setting(self, server_id, channel, nickname, setting):
|
||||||
|
self.execute(
|
||||||
|
"""DELETE FROM user_channel_settings WHERE
|
||||||
|
server_id=? AND channel=? AND nickname=? AND setting=?""",
|
||||||
|
[server_id, channel.lower(), nickname.lower(), setting.lower()])
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,22 @@ class Channel(object):
|
||||||
self.bot.database.del_channel_setting(self.server.id,
|
self.bot.database.del_channel_setting(self.server.id,
|
||||||
self.name, setting)
|
self.name, setting)
|
||||||
|
|
||||||
|
def set_user_setting(self, nickname, setting, value):
|
||||||
|
self.bot.database.set_user_channel_setting(self.server.id,
|
||||||
|
self.name, nickname, setting, value)
|
||||||
|
def get_user_setting(self, nickname, setting, default=None):
|
||||||
|
return self.bot.database.get_user_channel_setting(
|
||||||
|
self.server.id, self.name, nickname, setting, default)
|
||||||
|
def find_user_settings(self, nickname, pattern, default=[]):
|
||||||
|
return self.bot.database.find_user_channel_settings(
|
||||||
|
self.server.id, self.name, nickname, pattern, default)
|
||||||
|
def find_user_settings_prefix(self, nickname, prefix, default=[]):
|
||||||
|
return self.bot.database.find_user_channel_settings_prefix(
|
||||||
|
self.server.id, self.name, nickname, prefix, default)
|
||||||
|
def del_user_setting(self, nickname, setting):
|
||||||
|
self.bot.database.del_user_channel_setting(self.server.id,
|
||||||
|
self.name, nickname, setting)
|
||||||
|
|
||||||
def send_message(self, text, prefix=None):
|
def send_message(self, text, prefix=None):
|
||||||
self.server.send_message(self.name, text, prefix=prefix)
|
self.server.send_message(self.name, text, prefix=prefix)
|
||||||
def send_mode(self, mode=None, target=None):
|
def send_mode(self, mode=None, target=None):
|
||||||
|
|
Loading…
Reference in a new issue