Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/database/__init__.py

342 lines
11 KiB
Python
Raw Normal View History

2021-02-12 18:22:24 +00:00
import datetime
2021-02-01 15:13:11 +00:00
import os
import sqlite3
import traceback
from graia.application import Group, Friend, Member
dbpath = os.path.abspath('./database/save.db')
def initialize():
a = open(dbpath, 'w')
a.close()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
c.execute('''CREATE TABLE group_permission
(ID INT PRIMARY KEY NOT NULL,
ENABLE_MODULES TEXT);''')
c.execute('''CREATE TABLE self_permission
(ID INT PRIMARY KEY NOT NULL,
DISABLE_MODULES TEXT);''')
2021-02-25 12:36:19 +00:00
c.execute('''CREATE TABLE friend_permission
(ID INT PRIMARY KEY NOT NULL,
ENABLE_MODULES TEXT);''')
2021-02-01 15:13:11 +00:00
c.execute('''CREATE TABLE black_list
(ID INT PRIMARY KEY NOT NULL);''')
c.execute('''CREATE TABLE white_list
(ID INT PRIMARY KEY NOT NULL);''')
c.execute('''CREATE TABLE warn
(ID INT PRIMARY KEY NOT NULL,
WARN TEXT);''')
c.execute('''CREATE TABLE superuser
(ID INT PRIMARY KEY NOT NULL);''')
2021-02-12 18:22:24 +00:00
c.execute('''CREATE TABLE time
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP);''')
2021-02-01 15:13:11 +00:00
c.close()
def connect_db(path):
conn = sqlite3.connect(path)
c = conn.cursor()
return c
def update_modules(do, id, modules_name, table='group_permission', value='ENABLE_MODULES'):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID={id}").fetchone()
if do == 'add':
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return '失败:模块已被启用:' + modules_name
else:
enabled_split.append(modules_name)
c.execute(f"UPDATE {table} SET {value}='{'|'.join(enabled_split)}' WHERE ID='{id}'")
conn.commit()
return '成功:启用模块:' + modules_name
else:
c.execute(f"INSERT INTO {table} (ID, {value}) VALUES (?, ?)", (id, modules_name))
conn.commit()
return '成功:启用模块:' + modules_name
elif do == 'del':
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
enabled_split.remove(modules_name)
c.execute(f"UPDATE {table} SET {value}='{'|'.join(enabled_split)}' WHERE ID='{id}'")
conn.commit()
return '成功:禁用模块:' + modules_name
else:
return '失败:未启用过该模块:' + modules_name
else:
return '失败:未启用过该模块:' + modules_name
def update_modules_self(do, id, modules_name, table='self_permission', value='DISABLE_MODULES'):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID={id}").fetchone()
if do == 'del':
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return '失败:模块已被禁用:' + modules_name
else:
enabled_split.append(modules_name)
c.execute(f"UPDATE {table} SET {value}='{'|'.join(enabled_split)}' WHERE ID='{id}'")
conn.commit()
return '成功:禁用模块:' + modules_name
else:
c.execute(f"INSERT INTO {table} (ID, {value}) VALUES (?, ?)", (id, modules_name))
conn.commit()
return '成功:禁用模块:' + modules_name
elif do == 'add':
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
enabled_split.remove(modules_name)
c.execute(f"UPDATE {table} SET {value}='{'|'.join(enabled_split)}' WHERE ID='{id}'")
conn.commit()
return '成功:启用模块:' + modules_name
else:
return '失败:未禁用过该模块:' + modules_name
else:
return '失败:未禁用过该模块:' + modules_name
def check_enable_modules(kwargs, modules_name, table='group_permission'):
if not os.path.exists(dbpath):
initialize()
if isinstance(kwargs, int):
target = kwargs
else:
if Group in kwargs:
table == 'group_permission'
target = kwargs[Group].id
if Friend in kwargs:
table == 'self_permission'
target = kwargs[Friend].id
if table == 'group_permission':
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID='{target}'").fetchone()
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return True
else:
return False
else:
return False
if table == 'self_permission':
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID='{target}'").fetchone()
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return False
else:
return True
else:
return True
2021-02-25 12:36:19 +00:00
if table == 'friend_modules_permission':
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID='{target}'").fetchone()
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return True
else:
return False
else:
return False
2021-02-01 15:13:11 +00:00
def check_enable_modules_self(id, modules_name, table='self_permission'):
if not os.path.exists(dbpath):
initialize()
if table == 'self_permission':
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table} WHERE ID='{id}'").fetchone()
if a:
enabled_split = a[1].split('|')
if modules_name in enabled_split:
return False
else:
return True
else:
return True
def check_enable_modules_all(table, modules_name):
# 检查表中所有匹配的对象返回一个list
if not os.path.exists(dbpath):
initialize()
enable_target = []
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM {table}").fetchall()
for x in a:
enabled_split = x[1].split('|')
if modules_name in enabled_split:
enable_target.append(x[0])
return enable_target
def add_black_list(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
c.execute(f"INSERT INTO black_list (ID) VALUES ('{id}')")
conn.commit()
c.close()
def add_white_list(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
c.execute(f"INSERT INTO white_list (ID) VALUES ('{id}')")
conn.commit()
c.close()
def check_black_list(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM black_list WHERE ID={id}").fetchone()
if a:
return True
else:
return False
def check_white_list(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM white_list WHERE ID={id}").fetchone()
if a:
return True
else:
return False
def check_superuser(kwargs: dict):
if not os.path.exists(dbpath):
initialize()
if Group in kwargs:
id = kwargs[Member].id
if Friend in kwargs:
id = kwargs[Friend].id
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM superuser WHERE ID={id}").fetchone()
if a:
return True
else:
return False
def add_superuser(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
try:
c.execute(f"INSERT INTO superuser (ID) VALUES ('{id}')")
except:
traceback.print_exc()
conn.commit()
c.close()
return '成功?我也不知道成没成,懒得写判断了('
def del_superuser(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
try:
c.execute(f"DELETE FROM superuser WHERE ID='{id}'")
except:
traceback.print_exc()
conn.commit()
c.close()
return '成功?我也不知道成没成,懒得写判断了('
def warn_someone(id):
if not os.path.exists(dbpath):
initialize()
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM warn WHERE ID={id}").fetchone()
if a:
c.execute(f"UPDATE warn SET WARN='{int(a[1]) + 1}' WHERE ID='{id}'")
else:
c.execute(f"INSERT INTO warn (ID, WARN) VALUES (?, ?)", (id, 0,))
conn.commit()
if int(a[1]) > 5:
add_black_list(id)
2021-02-12 18:22:24 +00:00
def write_time(kwargs, name):
if not os.path.exists(dbpath):
initialize()
if Group in kwargs:
id = kwargs[Member].id
if Friend in kwargs:
id = kwargs[Friend].id
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM time WHERE ID='{id}' and NAME='{name}'").fetchone()
if a:
print(a)
c.execute(f"UPDATE time SET TIME=datetime('now') WHERE ID='{id}'")
conn.commit()
else:
c.execute(f"INSERT INTO time (ID, NAME) VALUES (?, ?)", (id, name))
conn.commit()
def check_time(kwargs, name, delay: int):
if not os.path.exists(dbpath):
initialize()
if Group in kwargs:
id = kwargs[Member].id
if Friend in kwargs:
id = kwargs[Friend].id
conn = sqlite3.connect(dbpath)
c = conn.cursor()
a = c.execute(f"SELECT * FROM time WHERE ID='{id}' and NAME='{name}'").fetchone()
if a:
print(a)
print(datetime.datetime.strptime(a[2], "%Y-%m-%d %H:%M:%S").timestamp())
print(datetime.datetime.now().timestamp())
2021-02-19 12:18:47 +00:00
check = (datetime.datetime.strptime(a[2], "%Y-%m-%d %H:%M:%S") + datetime.timedelta(
hours=8)).timestamp() - datetime.datetime.now().timestamp()
2021-02-12 18:22:24 +00:00
print(check)
if check > - delay:
return check
else:
return False
else:
return False