1
0
Fork 0
mirror of https://github.com/EDeev/chatping_abobot.git synced 2026-10-07 20:49:45 +03:00

Статистика: атомарные счётчики, схема баз создаётся при первом запуске

Счётчики увеличивались через SELECT и UPDATE с ручным +1 — одновременные сообщения
терялись. Теперь UPDATE … SET mes = mes + 1. Имя таблицы чата приводится к int перед
подстановкой в SQL. Таблицы work/stat/month/edit/users/groups создаются, если их нет, —
пустые базы убраны из репозитория (схема та же; проверено на копии рабочих баз).
This commit is contained in:
Деев Егор Викторович 2026-10-06 01:10:51 +00:00
parent 4cd8470087
commit e00b035265
5 changed files with 104 additions and 131 deletions

View file

@ -1,5 +1,16 @@
import logging
import sqlite3 import sqlite3
# номер счётчика в обработчиках → колонка таблицы статистики
COLUMNS = {1: "mes", 2: "rep", 3: "com", 4: "url", 5: "med", 6: "sti", 7: "voi"}
# Таблица на каждый чат — так устроены рабочие базы бота; имя таблицы — внутренний числовой id чата,
# поэтому перед подстановкой в SQL он приводится к int
def table(group_id):
return f"[{int(group_id)}]"
class Base: class Base:
def __init__(self, database): def __init__(self, database):
@ -7,55 +18,66 @@ class Base:
self.connection = sqlite3.connect(database) self.connection = sqlite3.connect(database)
self.cursor = self.connection.cursor() self.cursor = self.connection.cursor()
# на новой установке таблиц ещё нет
stat_columns = ", ".join(f"{c} INTEGER" for c in COLUMNS.values())
with self.connection:
self.cursor.execute("CREATE TABLE IF NOT EXISTS work (group_id INTEGER NOT NULL, "
"state BOOLEAN NOT NULL DEFAULT (True))")
self.cursor.execute(f"CREATE TABLE IF NOT EXISTS stat (group_id INTEGER NOT NULL, {stat_columns})")
self.cursor.execute(f"CREATE TABLE IF NOT EXISTS month (group_id INTEGER NOT NULL, {stat_columns})")
self.cursor.execute("CREATE TABLE IF NOT EXISTS edit (user_id INTEGER NOT NULL)")
self.cursor.execute("CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT)")
def get_meta(self, key):
with self.connection:
row = self.cursor.execute("SELECT value FROM meta WHERE key = ?", (key,)).fetchone()
return row[0] if row else None
def set_meta(self, key, value):
with self.connection:
self.cursor.execute("INSERT INTO meta (key, value) VALUES (?, ?) "
"ON CONFLICT(key) DO UPDATE SET value = excluded.value", (key, value))
def reset_month(self):
"""Обнуляем месячную статистику групп"""
with self.connection:
self.cursor.execute("UPDATE month SET " + ", ".join(f"{c} = 0" for c in COLUMNS.values()))
def increment(self, name, group_id, var_id):
"""Счётчик +1 одним запросом: раньше SELECT и UPDATE с ручным +1 теряли сообщения,
пришедшие одновременно"""
column = COLUMNS[var_id]
try:
with self.connection:
self.cursor.execute(f"UPDATE {name} SET {column} = {column} + 1 WHERE group_id = ?", (group_id,))
except sqlite3.Error:
# статистика не должна мешать остальной обработке сообщения
logging.exception("Не удалось обновить статистику %s", name)
# КОМАНДЫ # КОМАНДЫ
def add_group(self, group_id): def add_group(self, group_id):
"""Добавляем нового пользователя""" """Добавляем нового пользователя"""
with self.connection: with self.connection:
self.cursor.execute(f"INSERT INTO `work` (`group_id`) VALUES(?)", (group_id,)) self.cursor.execute("INSERT INTO `work` (`group_id`) VALUES(?)", (group_id,))
self.cursor.execute(f"INSERT INTO `stat` (`group_id`, `mes`, `rep`, `com`, `url`, `med`, `sti`, " self.cursor.execute("INSERT INTO `stat` (`group_id`, `mes`, `rep`, `com`, `url`, `med`, `sti`, "
f"`voi`) VALUES(?,?,?,?,?,?,?,?)", (group_id, 0, 0, 0, 0, 0, 0, 0)) "`voi`) VALUES(?,?,?,?,?,?,?,?)", (group_id, 0, 0, 0, 0, 0, 0, 0))
return return
def group_exists(self, group_id): def group_exists(self, group_id):
"""Проверяем, есть ли уже пользователь в базе""" """Проверяем, есть ли уже пользователь в базе"""
with self.connection: with self.connection:
result = self.cursor.execute(f'SELECT * FROM `work` WHERE `group_id` = ?', (group_id,)).fetchall() result = self.cursor.execute('SELECT * FROM `work` WHERE `group_id` = ?', (group_id,)).fetchall()
return bool(len(result)) return bool(len(result))
# ТАБЛИЦА STAT # ТАБЛИЦА STAT
def update_stat(self, group_id, var_id): def update_stat(self, group_id, var_id):
"""Обновляем статистику""" """Обновляем статистику"""
try: self.increment("stat", group_id, var_id)
with self.connection:
self.cursor.execute(f"SELECT * FROM `stat` WHERE `group_id` = ?", (group_id,))
if var_id == 1:
return self.cursor.execute(f"UPDATE `stat` SET `mes` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[1] + 1), group_id))
elif var_id == 2:
return self.cursor.execute(f"UPDATE `stat` SET `rep` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[2] + 1), group_id))
elif var_id == 3:
return self.cursor.execute(f"UPDATE `stat` SET `com` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[3] + 1), group_id))
elif var_id == 4:
return self.cursor.execute(f"UPDATE `stat` SET `url` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[4] + 1), group_id))
elif var_id == 5:
return self.cursor.execute(f"UPDATE `stat` SET `med` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[5] + 1), group_id))
elif var_id == 6:
return self.cursor.execute(f"UPDATE `stat` SET `sti` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[6] + 1), group_id))
elif var_id == 7:
return self.cursor.execute(f"UPDATE `stat` SET `voi` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[7] + 1), group_id))
except Exception as e:
print(repr(e))
def stat_group(self, group_id): def stat_group(self, group_id):
"""Получение данных пользователя""" """Получение данных пользователя"""
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `stat` WHERE `group_id` = ?", (group_id,)) self.cursor.execute("SELECT * FROM `stat` WHERE `group_id` = ?", (group_id,))
data = self.cursor.fetchone() data = self.cursor.fetchone()
return data[1:] return data[1:]
@ -74,37 +96,12 @@ class Base:
def update_month_stat(self, group_id, var_id): def update_month_stat(self, group_id, var_id):
"""Обновляем статистику""" """Обновляем статистику"""
try: self.increment("month", group_id, var_id)
with self.connection:
self.cursor.execute(f"SELECT * FROM `month` WHERE `group_id` = ?", (group_id,))
if var_id == 1:
return self.cursor.execute(f"UPDATE `month` SET `mes` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[1] + 1), group_id))
elif var_id == 2:
return self.cursor.execute(f"UPDATE `month` SET `rep` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[2] + 1), group_id))
elif var_id == 3:
return self.cursor.execute(f"UPDATE `month` SET `com` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[3] + 1), group_id))
elif var_id == 4:
return self.cursor.execute(f"UPDATE `month` SET `url` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[4] + 1), group_id))
elif var_id == 5:
return self.cursor.execute(f"UPDATE `month` SET `med` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[5] + 1), group_id))
elif var_id == 6:
return self.cursor.execute(f"UPDATE `month` SET `sti` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[6] + 1), group_id))
elif var_id == 7:
return self.cursor.execute(f"UPDATE `month` SET `voi` = ? WHERE `group_id` = ?",
((self.cursor.fetchone()[7] + 1), group_id))
except Exception as e:
print(repr(e))
def month_stat_group(self, group_id): def month_stat_group(self, group_id):
"""Получение данных пользователя""" """Получение данных пользователя"""
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `month` WHERE `group_id` = ?", (group_id,)) self.cursor.execute("SELECT * FROM `month` WHERE `group_id` = ?", (group_id,))
data = self.cursor.fetchone() data = self.cursor.fetchone()
return data[1:] return data[1:]
@ -123,19 +120,19 @@ class Base:
def del_edit_user(self, user_id): def del_edit_user(self, user_id):
"""Удаление пользователя""" """Удаление пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f'DELETE FROM `edit` WHERE `user_id` = ?', (user_id,)) return self.cursor.execute('DELETE FROM `edit` WHERE `user_id` = ?', (user_id,))
# ТАБЛИЦА WORK # ТАБЛИЦА WORK
def check_status(self, group_id): def check_status(self, group_id):
"""Получаем статус""" """Получаем статус"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0] return self.cursor.execute('SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
def update_status(self, group_id): def update_status(self, group_id):
"""Обновляем статус""" """Обновляем статус"""
with self.connection: with self.connection:
state = self.cursor.execute(f'SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0] state = self.cursor.execute('SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
return self.cursor.execute(f"UPDATE `work` SET `state` = ? WHERE `group_id` = ?", (not state, group_id)) return self.cursor.execute("UPDATE `work` SET `state` = ? WHERE `group_id` = ?", (not state, group_id))
# ЗАКРЫТИЕ ВЫЗОВА # ЗАКРЫТИЕ ВЫЗОВА
def close(self): def close(self):
@ -149,27 +146,33 @@ class User:
self.connection = sqlite3.connect(database) self.connection = sqlite3.connect(database)
self.cursor = self.connection.cursor() self.cursor = self.connection.cursor()
with self.connection:
self.cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"user_id INTEGER NOT NULL)")
self.cursor.execute("CREATE TABLE IF NOT EXISTS \"groups\" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"group_id INTEGER NOT NULL)")
# СВЯЗКА ПОЛЬЗОВАТЕЛЯ # СВЯЗКА ПОЛЬЗОВАТЕЛЯ
def user_exists(self, user_id): def user_exists(self, user_id):
"""Проверяем, есть ли уже пользователь в базе""" """Проверяем, есть ли уже пользователь в базе"""
with self.connection: with self.connection:
result = self.cursor.execute(f'SELECT * FROM `users` WHERE `user_id` = ?', (user_id,)).fetchall() result = self.cursor.execute('SELECT * FROM `users` WHERE `user_id` = ?', (user_id,)).fetchall()
return bool(len(result)) return bool(len(result))
def add_user(self, user_id): def add_user(self, user_id):
"""Добавляем нового пользователя""" """Добавляем нового пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f"INSERT INTO `users` (`user_id`) VALUES(?)", (user_id,)) return self.cursor.execute("INSERT INTO `users` (`user_id`) VALUES(?)", (user_id,))
def get_user_id(self, user_id): def get_user_id(self, user_id):
"""Получаем короткое айди юзера""" """Получаем короткое айди юзера"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `id` FROM `users` WHERE `user_id` = ?', (user_id,)).fetchone()[0] return self.cursor.execute('SELECT `id` FROM `users` WHERE `user_id` = ?', (user_id,)).fetchone()[0]
def get_first_user_id(self, user_id): def get_first_user_id(self, user_id):
"""Получаем длинное айди юзера""" """Получаем длинное айди юзера"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `user_id` FROM `users` WHERE `id` = ?', (user_id,)).fetchone()[0] return self.cursor.execute('SELECT `user_id` FROM `users` WHERE `id` = ?', (user_id,)).fetchone()[0]
# СВЯЗКА ГРУППЫ # СВЯЗКА ГРУППЫ
def group_exists(self, group_id): def group_exists(self, group_id):
@ -186,12 +189,12 @@ class User:
def get_group_id(self, group_id): def get_group_id(self, group_id):
"""Получаем короткое айди юзера""" """Получаем короткое айди юзера"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `id` FROM `groups` WHERE `group_id` = ?', (group_id,)).fetchone()[0] return self.cursor.execute('SELECT `id` FROM `groups` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
def get_first_group_id(self, group_id): def get_first_group_id(self, group_id):
"""Получаем длинное айди юзера""" """Получаем длинное айди юзера"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `group_id` FROM `groups` WHERE `id` = ?', (group_id,)).fetchone()[0] return self.cursor.execute('SELECT `group_id` FROM `groups` WHERE `id` = ?', (group_id,)).fetchone()[0]
def update_group_id(self, from_id, to_id): def update_group_id(self, from_id, to_id):
"""Заменяем на новый айди""" """Заменяем на новый айди"""
@ -214,7 +217,7 @@ class Group:
def created_group(self, group_id): def created_group(self, group_id):
"""Создаём новую таблицу""" """Создаём новую таблицу"""
with self.connection: with self.connection:
return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS [{group_id}] ( return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {table(group_id)} (
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
first_name STRING, first_name STRING,
mes INTEGER, mes INTEGER,
@ -228,76 +231,57 @@ class Group:
def add_user(self, group_id, user_id, name): def add_user(self, group_id, user_id, name):
"""Добавляем нового пользователя""" """Добавляем нового пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f"INSERT INTO `{group_id}` (`user_id`, `first_name`, `mes`, `rep`, `com`, `url`, " return self.cursor.execute(f"INSERT INTO {table(group_id)} (`user_id`, `first_name`, `mes`, `rep`, `com`, `url`, "
f"`med`, `sti`, `voi`) VALUES(?,?,?,?,?,?,?,?,?)", (user_id, name, 0, 0, 0, 0, 0, f"`med`, `sti`, `voi`) VALUES(?,?,?,?,?,?,?,?,?)", (user_id, name, 0, 0, 0, 0, 0,
0, 0)) 0, 0))
def all_names(self, group_id): def all_names(self, group_id):
"""Список имён""" """Список имён"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `first_name` FROM `{group_id}`').fetchall() return self.cursor.execute(f'SELECT `first_name` FROM {table(group_id)}').fetchall()
def all_ids(self, group_id): def all_ids(self, group_id):
"""Список айди""" """Список айди"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `user_id` FROM `{group_id}`').fetchall() return self.cursor.execute(f'SELECT `user_id` FROM {table(group_id)}').fetchall()
def update_stat(self, user_id, group_id, var_id): def update_stat(self, user_id, group_id, var_id):
"""Обновляем статистику""" """Обновляем статистику"""
column = COLUMNS[var_id]
try: try:
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,)) self.cursor.execute(f"UPDATE {table(group_id)} SET {column} = {column} + 1 WHERE user_id = ?",
if var_id == 1: (user_id,))
return self.cursor.execute(f"UPDATE `{group_id}` SET `mes` = ? WHERE `user_id` = ?", except sqlite3.Error:
((self.cursor.fetchone()[2] + 1), user_id)) logging.exception("Не удалось обновить статистику участника")
elif var_id == 2:
return self.cursor.execute(f"UPDATE `{group_id}` SET `rep` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[3] + 1), user_id))
elif var_id == 3:
return self.cursor.execute(f"UPDATE `{group_id}` SET `com` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[4] + 1), user_id))
elif var_id == 4:
return self.cursor.execute(f"UPDATE `{group_id}` SET `url` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[5] + 1), user_id))
elif var_id == 5:
return self.cursor.execute(f"UPDATE `{group_id}` SET `med` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[6] + 1), user_id))
elif var_id == 6:
return self.cursor.execute(f"UPDATE `{group_id}` SET `sti` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[7] + 1), user_id))
elif var_id == 7:
return self.cursor.execute(f"UPDATE `{group_id}` SET `voi` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[8] + 1), user_id))
except Exception as e:
print(repr(e))
def user_exists(self, user_id, group_id): def user_exists(self, user_id, group_id):
"""Проверяем, есть ли уже пользователь в базе""" """Проверяем, есть ли уже пользователь в базе"""
with self.connection: with self.connection:
result = self.cursor.execute(f'SELECT * FROM `{group_id}` WHERE `user_id` = ?', (user_id,)).fetchall() result = self.cursor.execute(f'SELECT * FROM {table(group_id)} WHERE `user_id` = ?', (user_id,)).fetchall()
return bool(len(result)) return bool(len(result))
def update_name(self, user_id, group_id, name): def update_name(self, user_id, group_id, name):
"""Обновляем имя пользователя""" """Обновляем имя пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f"UPDATE `{group_id}` SET `first_name` = ? WHERE `user_id` = ?", (name, user_id)) return self.cursor.execute(f"UPDATE {table(group_id)} SET `first_name` = ? WHERE `user_id` = ?", (name, user_id))
def user_name(self, user_id, group_id): def user_name(self, user_id, group_id):
"""Получаем имя пользователя по айди""" """Получаем имя пользователя по айди"""
with self.connection: with self.connection:
return self.cursor.execute(f"SELECT `first_name` FROM `{group_id}` WHERE `user_id` = ?", (user_id,)).fetchone()[0] return self.cursor.execute(f"SELECT `first_name` FROM {table(group_id)} WHERE `user_id` = ?", (user_id,)).fetchone()[0]
def stat_user(self, user_id, group_id): def stat_user(self, user_id, group_id):
"""Получение данных пользователя""" """Получение данных пользователя"""
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,)) self.cursor.execute(f"SELECT * FROM {table(group_id)} WHERE `user_id` = ?", (user_id,))
data = self.cursor.fetchone() data = self.cursor.fetchone()
return data[2:] return data[2:]
def del_user(self, group_id, user_id): def del_user(self, group_id, user_id):
"""Удаление пользователя""" """Удаление пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f'DELETE FROM `{group_id}` WHERE `user_id` = ?', (user_id,)) return self.cursor.execute(f'DELETE FROM {table(group_id)} WHERE `user_id` = ?', (user_id,))
# ЗАКРЫТИЕ ВЫЗОВА # ЗАКРЫТИЕ ВЫЗОВА
def close(self): def close(self):
@ -311,40 +295,29 @@ class Month:
self.connection = sqlite3.connect(database) self.connection = sqlite3.connect(database)
self.cursor = self.connection.cursor() self.cursor = self.connection.cursor()
def reset_all(self):
"""Обнуляем месячную статистику участников во всех чатах"""
with self.connection:
tables = [r[0] for r in self.cursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'")]
for name in tables:
if name.lstrip("-").isdigit():
self.cursor.execute(f"UPDATE {table(name)} SET " + ", ".join(f"{c} = 0" for c in COLUMNS.values()))
# КОМАНДЫ # КОМАНДЫ
def update_stat(self, user_id, group_id, var_id): def update_stat(self, user_id, group_id, var_id):
"""Обновляем статистику""" """Обновляем статистику"""
column = COLUMNS[var_id]
try: try:
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,)) self.cursor.execute(f"UPDATE {table(group_id)} SET {column} = {column} + 1 WHERE user_id = ?",
if var_id == 1: (user_id,))
return self.cursor.execute(f"UPDATE `{group_id}` SET `mes` = ? WHERE `user_id` = ?", except sqlite3.Error:
((self.cursor.fetchone()[1] + 1), user_id)) logging.exception("Не удалось обновить статистику участника")
elif var_id == 2:
return self.cursor.execute(f"UPDATE `{group_id}` SET `rep` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[2] + 1), user_id))
elif var_id == 3:
return self.cursor.execute(f"UPDATE `{group_id}` SET `com` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[3] + 1), user_id))
elif var_id == 4:
return self.cursor.execute(f"UPDATE `{group_id}` SET `url` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[4] + 1), user_id))
elif var_id == 5:
return self.cursor.execute(f"UPDATE `{group_id}` SET `med` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[5] + 1), user_id))
elif var_id == 6:
return self.cursor.execute(f"UPDATE `{group_id}` SET `sti` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[6] + 1), user_id))
elif var_id == 7:
return self.cursor.execute(f"UPDATE `{group_id}` SET `voi` = ? WHERE `user_id` = ?",
((self.cursor.fetchone()[7] + 1), user_id))
except Exception as e:
print(repr(e))
def created_group(self, group_id): def created_group(self, group_id):
"""Создаём новую таблицу""" """Создаём новую таблицу"""
with self.connection: with self.connection:
return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS [{group_id}] ( return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {table(group_id)} (
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
mes INTEGER, mes INTEGER,
rep INTEGER, rep INTEGER,
@ -357,31 +330,31 @@ class Month:
def add_user(self, group_id, user_id): def add_user(self, group_id, user_id):
"""Добавляем нового пользователя""" """Добавляем нового пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f"INSERT INTO `{group_id}` (`user_id`, `mes`, `rep`, `com`, `url`, `med`, " return self.cursor.execute(f"INSERT INTO {table(group_id)} (`user_id`, `mes`, `rep`, `com`, `url`, `med`, "
f"`sti`, `voi`) VALUES(?,?,?,?,?,?,?,?)", (user_id, 0, 0, 0, 0, 0, 0, 0)) f"`sti`, `voi`) VALUES(?,?,?,?,?,?,?,?)", (user_id, 0, 0, 0, 0, 0, 0, 0))
def all_ids(self, group_id): def all_ids(self, group_id):
"""Список айди""" """Список айди"""
with self.connection: with self.connection:
return self.cursor.execute(f'SELECT `user_id` FROM `{group_id}`').fetchall() return self.cursor.execute(f'SELECT `user_id` FROM {table(group_id)}').fetchall()
def user_exists(self, user_id, group_id): def user_exists(self, user_id, group_id):
"""Проверяем, есть ли уже пользователь в базе""" """Проверяем, есть ли уже пользователь в базе"""
with self.connection: with self.connection:
result = self.cursor.execute(f'SELECT * FROM `{group_id}` WHERE `user_id` = ?', (user_id,)).fetchall() result = self.cursor.execute(f'SELECT * FROM {table(group_id)} WHERE `user_id` = ?', (user_id,)).fetchall()
return bool(len(result)) return bool(len(result))
def stat_user(self, user_id, group_id): def stat_user(self, user_id, group_id):
"""Получение данных пользователя""" """Получение данных пользователя"""
with self.connection: with self.connection:
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,)) self.cursor.execute(f"SELECT * FROM {table(group_id)} WHERE `user_id` = ?", (user_id,))
data = self.cursor.fetchone() data = self.cursor.fetchone()
return data[1:] return data[1:]
def del_user(self, group_id, user_id): def del_user(self, group_id, user_id):
"""Удаление пользователя""" """Удаление пользователя"""
with self.connection: with self.connection:
return self.cursor.execute(f'DELETE FROM `{group_id}` WHERE `user_id` = ?', (user_id,)) return self.cursor.execute(f'DELETE FROM {table(group_id)} WHERE `user_id` = ?', (user_id,))
# ЗАКРЫТИЕ ВЫЗОВА # ЗАКРЫТИЕ ВЫЗОВА
def close(self): def close(self):

Binary file not shown.

View file

View file

Binary file not shown.