1.8 Исправление ошибок с БД

This commit is contained in:
Verum
2025-03-02 22:44:24 +07:00
parent 247100f7e2
commit 058e71d293
5 changed files with 36 additions and 22 deletions

View File

@@ -7,6 +7,7 @@ from .start_cmd import start_cmd
from .start_time_cmd import start_time_cmd from .start_time_cmd import start_time_cmd
from .help_cmd import help_cmd from .help_cmd import help_cmd
from .weather_cmd import weather_cmd from .weather_cmd import weather_cmd
from .stats import stats_cmd
# Объявление роутера и настройка экспорта модулей # Объявление роутера и настройка экспорта модулей
__all__ = ("router",) __all__ = ("router",)
@@ -18,6 +19,7 @@ router.include_routers(
help_cmd.router, help_cmd.router,
start_time_cmd.router, start_time_cmd.router,
weather_cmd.router, weather_cmd.router,
stats_cmd.router,
) )
router.include_routers(start_cmd.router) router.include_routers(start_cmd.router)

View File

@@ -20,6 +20,6 @@ async def base_sql(message: types.Message):
last_name = message.from_user.last_name last_name = message.from_user.last_name
if Permissions.sql_user: if Permissions.sql_user:
await add_user(tg_id, usernames, first_name, last_name, role="active", status="user") await add_user(tg_id, usernames, first_name, last_name, role="", status="active", user="user")
await update_user(tg_id=tg_id, first_name=first_name, last_name=last_name) await update_user(tg_id=tg_id, first_name=first_name, last_name=last_name)
await update_user_messages(tg_id, message) await update_user_messages(message=message)

View File

@@ -9,8 +9,8 @@ __all__ = ("add_user",)
# Функция добавления пользователя с последовательным user_id # Функция добавления пользователя с последовательным user_id
async def add_user(tg_id: int, username: str, first_name: str, async def add_user(tg_id: int, username: str, first_name: str, last_name: str,
last_name: str, role: str, status: str, bd_name: str = BotVar.bd_names): role: str, status: str, user: str, bd_name: str = BotVar.bd_names):
with sqlite3.connect(bd_name) as db: with sqlite3.connect(bd_name) as db:
cursor = db.cursor() cursor = db.cursor()
@@ -26,9 +26,9 @@ async def add_user(tg_id: int, username: str, first_name: str,
# Добавляем нового пользователя # Добавляем нового пользователя
cursor.execute(''' cursor.execute('''
INSERT INTO users (user_id, tg_id, username, first_name, last_name, role, status) INSERT INTO users (user_id, tg_id, username, first_name, last_name, role, status, user)
VALUES (?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
''', (new_user_id, tg_id, username, first_name, last_name, role, status)) ''', (new_user_id, tg_id, username, first_name, last_name, role, status, user))
# Добавляем запись в user_messages # Добавляем запись в user_messages
cursor.execute(''' cursor.execute('''

View File

@@ -10,7 +10,7 @@ __all__ = ("update_user",)
# Функция обновления пользователя # Функция обновления пользователя
async def update_user(tg_id: int, username: str = None, first_name: str = None, last_name: str = None, async def update_user(tg_id: int, username: str = None, first_name: str = None, last_name: str = None,
bd_name: str = BotVar.bd_names, role: str = None): bd_name: str = BotVar.bd_names, role: str = None, user: str = None):
updates = [] updates = []
params = [] params = []
@@ -26,6 +26,9 @@ async def update_user(tg_id: int, username: str = None, first_name: str = None,
if role: if role:
updates.append("role = ?") updates.append("role = ?")
params.append(role) params.append(role)
if user:
updates.append("user = ?")
params.append(user)
if updates: if updates:
query = f"UPDATE users SET {', '.join(updates)} WHERE tg_id = ?" query = f"UPDATE users SET {', '.join(updates)} WHERE tg_id = ?"

View File

@@ -13,33 +13,42 @@ __all__ = ("update_user_messages",)
# Функция обновления статистики сообщений пользователя # Функция обновления статистики сообщений пользователя
async def update_user_messages(tg_id: int, message: types.Message, bd_name: str = BotVar.bd_names): async def update_user_messages(message: types.Message, bd_name: str = BotVar.bd_names):
with sqlite3.connect(bd_name) as db: with sqlite3.connect(bd_name) as db:
cursor = db.cursor() cursor = db.cursor()
cursor.execute("SELECT user_id FROM users WHERE tg_id = ?", (tg_id,)) user_id = message.from_user.id # Используем user_id напрямую
user_id = cursor.fetchone()
if not user_id:
return # Пользователь не найден
user_id = user_id[0]
# Проверяем, существует ли запись в user_messages # Проверяем, существует ли запись в user_messages
cursor.execute("SELECT last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages FROM user_messages WHERE user_id = ?", (user_id,)) cursor.execute(
"SELECT last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages FROM user_messages WHERE user_id = ?",
(user_id,))
result = cursor.fetchone() result = cursor.fetchone()
now = message.date.astimezone(timezone.utc) # Время сообщения в UTC # Время сообщения в московском времени
now = message.date.astimezone(timezone(timedelta(hours=3)))
today = now.date()
start_of_week = today - timedelta(days=today.weekday()) # Понедельник текущей недели
current_month = now.month
current_year = now.year
last_message = message.text or types_message(message) last_message = message.text or types_message(message)
last_message_id = message.message_id last_message_id = message.message_id
if result: if result:
last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages = result last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages = result
if last_message_time: if last_message_time:
last_message_time = datetime.fromisoformat(last_message_time).astimezone(timezone.utc) last_message_time = datetime.fromisoformat(last_message_time).astimezone(timezone(timedelta(hours=3)))
# Сбрасываем статистику по времени last_date = last_message_time.date()
if now - last_message_time >= timedelta(days=1): last_week = last_date - timedelta(days=last_date.weekday())
last_month = last_message_time.month
last_year = last_message_time.year
# Обнуляем счетчики, если наступил новый день, неделя или месяц
if last_date != today:
messages_per_day = 0 messages_per_day = 0
if now - last_message_time >= timedelta(weeks=1): if last_week != start_of_week:
messages_per_week = 0 messages_per_week = 0
if now - last_message_time >= timedelta(days=30): if last_month != current_month or last_year != current_year:
messages_per_month = 0 messages_per_month = 0
else: else:
messages_per_day, messages_per_week, messages_per_month = 0, 0, 0 messages_per_day, messages_per_week, messages_per_month = 0, 0, 0
@@ -50,7 +59,7 @@ async def update_user_messages(tg_id: int, message: types.Message, bd_name: str
messages_per_month += 1 messages_per_month += 1
total_messages += 1 total_messages += 1
else: else:
# Если записи нет, создаем новую (хотя это уже должно быть сделано в add_user) # Если записи нет, создаем новую
messages_per_day, messages_per_week, messages_per_month, total_messages = 1, 1, 1, 1 messages_per_day, messages_per_week, messages_per_month, total_messages = 1, 1, 1, 1
cursor.execute('INSERT INTO user_messages (user_id, last_message, last_message_id, last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', cursor.execute('INSERT INTO user_messages (user_id, last_message, last_message_id, last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
(user_id, last_message, last_message_id, now.isoformat(), messages_per_day, messages_per_week, messages_per_month, total_messages)) (user_id, last_message, last_message_id, now.isoformat(), messages_per_day, messages_per_week, messages_per_month, total_messages))