chatping_abobot/sql.py
Egor Deev f132905659
v. 2
2022-03-22 20:52:16 +07:00

263 lines
No EOL
16 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sqlite3
class SQLighter:
def __init__(self, database):
"""Подключаемся к БД и сохраняем курсор соединения"""
self.connection = sqlite3.connect(database)
self.cursor = self.connection.cursor()
self.cursor.execute("PRAGMA temp_store = 2")
# СВЯЗКА ГРУППЫ
def group_exists(self, id_group):
"""Проверяем, есть ли уже группа в базе"""
with self.connection:
result = self.cursor.execute('SELECT * FROM `group` WHERE `id_group` = ?', (id_group,)).fetchall()
return bool(len(result))
def add_group(self, id_group, status=True):
"""Добавляем новую группу в таблицу"""
with self.connection:
return self.cursor.execute("INSERT INTO `group` (`id_group`, `status`, `time`, `message`, `reply`, "
"`command`, `url`, `tik_tok`, `media`, `sticker`, `voice`, `bool`, `cool`) "
"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)",
(id_group, status, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
def add_month_group(self, id_group):
"""Добавляем новую группу в таблицу месяца"""
with self.connection:
return self.cursor.execute("INSERT INTO `month` (`id_group`, `message`, `reply`, `command`, `url`, "
"`tik_tok`, `media`, `sticker`, `voice`, `bool`, `cool`) "
"VALUES(?,?,?,?,?,?,?,?,?,?,?)", (id_group, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
def created_group(self, id_group):
"""Создаём новую таблицу"""
with self.connection:
return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS [{id_group}] (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_user VARCHAR (255) NOT NULL,
first_name TEXT (40) NOT NULL,
edit BOOLEAN NOT NULL
DEFAULT (FALSE),
time INTEGER NOT NULL
DEFAULT (1),
message INTEGER NOT NULL,
reply INTEGER NOT NULL,
command INTEGER NOT NULL,
url INTEGER NOT NULL,
tik_tok INTEGER NOT NULL,
media INTEGER NOT NULL,
sticker INTEGER NOT NULL,
voice INTEGER NOT NULL,
bool INTEGER NOT NULL,
cool INTEGER NOT NULL
);""")
def update_status_group(self, id_group, status):
"""Обновляем статус группы"""
with self.connection:
return self.cursor.execute("UPDATE `group` SET `status` = ? WHERE `id_group` = ?", (status, id_group))
def get_group(self, status=True):
"""Получаем все активные группы"""
with self.connection:
return self.cursor.execute("SELECT * FROM `group` WHERE `status` = ?", (status,)).fetchall()
def id_group_lst(self, status=True):
"""Список айди активных групп"""
with self.connection:
return [i[1] for i in self.cursor.execute("SELECT * FROM `group` WHERE `status` = ?", (status,)).fetchall()]
def all_id_group_lst(self):
"""Список всех айди групп"""
with self.connection:
return [i[0] for i in self.cursor.execute(f'SELECT id_group FROM `group`').fetchall()]
def statistics_group(self, id_group, var):
"""Обновляем статистику"""
with self.connection:
self.cursor.execute("SELECT * FROM `group` WHERE `id_group` = ?", (id_group,))
if var == 0:
return self.cursor.execute("UPDATE `group` SET `time` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[3] + 1), id_group))
elif var == 1:
return self.cursor.execute("UPDATE `group` SET `message` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[4] + 1), id_group))
elif var == 2:
return self.cursor.execute("UPDATE `group` SET `reply` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[5] + 1), id_group))
elif var == 3:
return self.cursor.execute("UPDATE `group` SET `command` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[6] + 1), id_group))
elif var == 4:
return self.cursor.execute("UPDATE `group` SET `url` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[7] + 1), id_group))
elif var == 5:
return self.cursor.execute("UPDATE `group` SET `tik_tok` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[8] + 1), id_group))
elif var == 6:
return self.cursor.execute("UPDATE `group` SET `media` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[9] + 1), id_group))
elif var == 7:
return self.cursor.execute("UPDATE `group` SET `sticker` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[10] + 1), id_group))
elif var == 8:
return self.cursor.execute("UPDATE `group` SET `voice` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[11] + 1), id_group))
elif var == 9:
return self.cursor.execute("UPDATE `group` SET `bool` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[12] + 1), id_group))
elif var == 10:
return self.cursor.execute("UPDATE `group` SET `cool` = ? WHERE `id_group` = ?",
((self.cursor.fetchone()[13] + 1), id_group))
def stat_element_group(self, id_group):
"""Получение данных группы"""
with self.connection:
self.cursor.execute("SELECT * FROM `group` WHERE `id_group` = ?", (id_group,))
data = self.cursor.fetchone()
time, message, reply, command, url = int(data[3]), int(data[4]), int(data[5]), int(data[6]), int(data[7])
tik_tok, media, sticker, voice = int(data[8]), int(data[9]), int(data[10]), int(data[11])
bol, cool = int(data[12]), int(data[13])
return [message, reply, command, url, tik_tok, media, sticker, voice, time, bol, cool]
def stat_element_month_group(self, id_group):
"""Получение месячных данных группы"""
with self.connection:
self.cursor.execute("SELECT * FROM `month` WHERE `id_group` = ?", (id_group,))
data = self.cursor.fetchone()
message, reply, command, url = int(data[2]), int(data[3]), int(data[4]), int(data[5])
tik_tok, media, sticker, voice = int(data[6]), int(data[7]), int(data[8]), int(data[9])
bol, cool = int(data[10]), int(data[11])
return [message, reply, command, url, tik_tok, media, sticker, voice, bol, cool]
def month_stat_group(self, id_group):
"""Перезапись месечной статистики"""
with self.connection:
self.cursor.execute("SELECT * FROM `group` WHERE `id_group` = ?", (id_group,))
group = self.cursor.fetchone()
self.cursor.execute("SELECT * FROM `month` WHERE `id_group` = ?", (id_group,))
month = self.cursor.fetchone()
message, reply, command = (group[4] - month[2]), (group[5] - month[3]), (group[6] - month[4])
url, tik_tok, media = (group[7] - month[5]), (group[8] - month[6]), (group[9] - month[7])
sticker, voice, bol = (group[10] - month[8]), (group[11] - month[9]), (group[12] - month[10])
cool = (group[13] - month[11])
self.cursor.execute("UPDATE `month` SET `message` = ? WHERE `id_group` = ?", ((group[4]), id_group))
self.cursor.execute("UPDATE `month` SET `reply` = ? WHERE `id_group` = ?", ((group[5]), id_group))
self.cursor.execute("UPDATE `month` SET `command` = ? WHERE `id_group` = ?", ((group[6]), id_group))
self.cursor.execute("UPDATE `month` SET `url` = ? WHERE `id_group` = ?", ((group[7]), id_group))
self.cursor.execute("UPDATE `month` SET `tik_tok` = ? WHERE `id_group` = ?", ((group[8]), id_group))
self.cursor.execute("UPDATE `month` SET `media` = ? WHERE `id_group` = ?", ((group[9]), id_group))
self.cursor.execute("UPDATE `month` SET `sticker` = ? WHERE `id_group` = ?", ((group[10]), id_group))
self.cursor.execute("UPDATE `month` SET `voice` = ? WHERE `id_group` = ?", ((group[11]), id_group))
self.cursor.execute("UPDATE `month` SET `bool` = ? WHERE `id_group` = ?", ((group[12]), id_group))
self.cursor.execute("UPDATE `month` SET `cool` = ? WHERE `id_group` = ?", ((group[13]), id_group))
return [message, reply, command, url, tik_tok, media, sticker, voice, bol, cool]
# СВЯЗКА ПОЛЬЗОВАТЕЛЯ
def user_exists(self, id_user, db):
"""Проверяем, есть ли уже пользователь в базе"""
with self.connection:
result = self.cursor.execute(f'SELECT * FROM `{db}` WHERE `id_user` = ?', (id_user,)).fetchall()
return bool(len(result))
def add_user(self, id_user, name, db):
"""Добавляем нового пользователя"""
with self.connection:
return self.cursor.execute(f"INSERT INTO `{db}` (`id_user`, `first_name`, `edit`, `time`, `message`, "
f"`reply`, `command`, `url`, `tik_tok`, `media`, `sticker`, `voice`, `bool`, "
f"`cool`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
(id_user, name, False, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
def update_name(self, id_user, name, db):
"""Обновляем имя пользователя"""
with self.connection:
return self.cursor.execute(f"UPDATE `{db}` SET `first_name` = ? WHERE `id_user` = ?", (name, id_user))
def edit_name(self, id_user, name, db, var):
"""Заменяем имеющиеся имя на желаемое"""
with self.connection:
if var == 1:
self.cursor.execute(f"UPDATE `{db}` SET `edit` = ? WHERE `id_user` = ?", (True, id_user))
return self.cursor.execute(f"UPDATE `{db}` SET `first_name` = ? WHERE `id_user` = ?", (name, id_user))
elif var == 0:
self.cursor.execute(f"UPDATE `{db}` SET `edit` = ? WHERE `id_user` = ?", (False, id_user))
return self.cursor.execute(f"UPDATE `{db}` SET `first_name` = ? WHERE `id_user` = ?", (name, id_user))
def get_users(self, db, status=True):
"""Получаем всех активных пользователей"""
with self.connection:
return [i[1] for i in self.cursor.execute(f"SELECT * FROM `{db}` WHERE `edit` = ?", (status,)).fetchall()]
def id_lst(self, db):
"""Список айди"""
with self.connection:
return [i[0] for i in self.cursor.execute(f'SELECT id_user FROM `{db}`').fetchall()]
def name_lst(self, db):
"""Список имён"""
with self.connection:
return [i[0] for i in self.cursor.execute(f'SELECT first_name FROM `{db}`').fetchall()]
def user_statistic(self, id_user, id_group, var):
"""Обновляем статистику"""
with self.connection:
self.cursor.execute(f"SELECT * FROM `{id_group}` WHERE `id_user` = ?", (id_user,))
if var == 0:
return self.cursor.execute(f"UPDATE `{id_group}` SET `time` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[4] + 1), id_user))
elif var == 1:
return self.cursor.execute(f"UPDATE `{id_group}` SET `message` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[5] + 1), id_user))
elif var == 2:
return self.cursor.execute(f"UPDATE `{id_group}` SET `reply` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[6] + 1), id_user))
elif var == 3:
return self.cursor.execute(f"UPDATE `{id_group}` SET `command` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[7] + 1), id_user))
elif var == 4:
return self.cursor.execute(f"UPDATE `{id_group}` SET `url` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[8] + 1), id_user))
elif var == 5:
return self.cursor.execute(f"UPDATE `{id_group}` SET `tik_tok` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[9] + 1), id_user))
elif var == 6:
return self.cursor.execute(f"UPDATE `{id_group}` SET `media` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[10] + 1), id_user))
elif var == 7:
return self.cursor.execute(f"UPDATE `{id_group}` SET `sticker` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[11] + 1), id_user))
elif var == 8:
return self.cursor.execute(f"UPDATE `{id_group}` SET `voice` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[12] + 1), id_user))
elif var == 9:
return self.cursor.execute(f"UPDATE `{id_group}` SET `bool` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[13] + 1), id_user))
elif var == 10:
return self.cursor.execute(f"UPDATE `{id_group}` SET `cool` = ? WHERE `id_user` = ?",
((self.cursor.fetchone()[14] + 1), id_user))
def stat_element_user(self, id_user, id_group):
"""Получение данных пользователя"""
with self.connection:
self.cursor.execute(f"SELECT * FROM `{id_group}` WHERE `id_user` = ?", (id_user,))
data = self.cursor.fetchone()
time, message, reply, command, url = int(data[4]), int(data[5]), int(data[6]), int(data[7]), int(data[8])
tik_tok, media, sticker, voice = int(data[9]), int(data[10]), int(data[11]), int(data[12])
bol, cool = int(data[13]), int(data[14])
return [message, reply, command, url, tik_tok, media, sticker, voice, time, bol, cool]
def get_name_user(self, id_user, id_group):
"""Получение имени пользователя"""
with self.connection:
self.cursor.execute(f"SELECT * FROM `{id_group}` WHERE `id_user` = ?", (id_user,))
return self.cursor.fetchone()[2]
def close(self):
"""Закрываем соединение с БД"""
self.connection.close()