mirror of git://git.acid.vegas/dickserv.git
83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
#!/usr/bin/env python
|
|
# DickServ IRC Bot - Developed by acidvegas in Python (https://acid.vegas/dickserv)
|
|
# database.py
|
|
|
|
import os
|
|
import sqlite3
|
|
|
|
# Globals
|
|
db = sqlite3.connect(os.path.join('data', 'bot.db'), check_same_thread=False)
|
|
sql = db.cursor()
|
|
|
|
def check():
|
|
tables = sql.execute('SELECT name FROM sqlite_master WHERE type=\'table\'').fetchall()
|
|
if not len(tables):
|
|
sql.execute('CREATE TABLE IGNORE (IDENT TEXT NOT NULL);')
|
|
sql.execute('CREATE TABLE SETTINGS (SETTING TEXT NOT NULL, VALUE INTEGER NOT NULL);')
|
|
sql.execute('INSERT INTO SETTINGS (SETTING,VALUE) VALUES (?, ?)', ('max_results', 5))
|
|
sql.execute('INSERT INTO SETTINGS (SETTING,VALUE) VALUES (?, ?)', ('max_todo', 100))
|
|
sql.execute('INSERT INTO SETTINGS (SETTING,VALUE) VALUES (?, ?)', ('max_todo_per', 5))
|
|
sql.execute('INSERT INTO SETTINGS (SETTING,VALUE) VALUES (?, ?)', ('todo_expire', 7))
|
|
sql.execute('CREATE TABLE TODO (DATE TEXT NOT NULL, IDENT TEXT NOT NULL, DATA TEXT NOT NULL);')
|
|
db.commit()
|
|
|
|
class Ignore:
|
|
def add(ident):
|
|
sql.execute('INSERT INTO IGNORE (IDENT) VALUES (?)', (ident,))
|
|
db.commit()
|
|
|
|
def idents():
|
|
return list(item[0] for item in sql.execute('SELECT IDENT FROM IGNORE ORDER BY IDENT ASC').fetchall())
|
|
|
|
def remove(ident):
|
|
sql.execute('DELETE FROM IGNORE WHERE IDENT=?', (ident,))
|
|
db.commit()
|
|
|
|
def reset():
|
|
sql.execute('DROP TABLE IGNORE')
|
|
sql.execute('CREATE TABLE IGNORE (IDENT TEXT NOT NULL);')
|
|
db.commit()
|
|
|
|
class Settings:
|
|
def get(setting):
|
|
return sql.execute('SELECT VALUE FROM SETTINGS WHERE SETTING=?', (setting,)).fetchone()[0]
|
|
|
|
def read():
|
|
return sql.execute('SELECT SETTING,VALUE FROM SETTINGS ORDER BY SETTING ASC').fetchall()
|
|
|
|
def settings():
|
|
return list(item[0] for item in sql.execute('SELECT SETTING FROM SETTINGS').fetchall())
|
|
|
|
def update(setting, value):
|
|
sql.execute('UPDATE SETTINGS SET VALUE=? WHERE SETTING=?', (value, setting))
|
|
db.commit()
|
|
|
|
class Todo:
|
|
def add(date, ident, data):
|
|
sql.execute('INSERT INTO TODO (DATE,IDENT,DATA) VALUES (?,?,?)', (date, ident, data))
|
|
db.commit()
|
|
|
|
def expire_check():
|
|
todos = set(list(item[0] for item in sql.execute('SELECT DATE FROM TODO').fetchall()))
|
|
for date in todos:
|
|
if functions.timespan(date) > Settings.get('todo_expire'):
|
|
sql.execute('DELETE FROM TODO WHERE DATE=?', (date,))
|
|
db.commit()
|
|
|
|
def idents():
|
|
return list(item[0] for item in sql.execute('SELECT IDENT FROM TODO').fetchall())
|
|
|
|
def read(ident=None):
|
|
if ident:
|
|
return list(item[0] for item in sql.execute('SELECT DATA FROM TODO WHERE IDENT=?', (ident,)).fetchall())
|
|
else:
|
|
return sql.execute('SELECT DATE,IDENT,DATA FROM TODO ORDER BY DATE ASC, IDENT ASC, DATA ASC').fetchall()
|
|
|
|
def remove(ident, data):
|
|
sql.execute('DELETE FROM TODO WHERE IDENT=? AND DATA=?', (ident, data))
|
|
db.commit()
|
|
|
|
def reset():
|
|
sql.execute('DROP TABLE TODO')
|
|
sql.execute('CREATE TABLE TODO (DATE TEXT NOT NULL, IDENT TEXT NOT NULL, DATA TEXT NOT NULL);')
|
|
db.commit() |