From 424676d43a98dce085b9e12e3d7b64a9a9618b11 Mon Sep 17 00:00:00 2001 From: Verum Date: Fri, 28 Feb 2025 13:46:24 +0700 Subject: [PATCH] =?UTF-8?q?1.4.1=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SQLite3/bd_func/bd_update_user_msg.py | 69 +++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 SQLite3/bd_func/bd_update_user_msg.py diff --git a/SQLite3/bd_func/bd_update_user_msg.py b/SQLite3/bd_func/bd_update_user_msg.py new file mode 100644 index 0000000..0f23793 --- /dev/null +++ b/SQLite3/bd_func/bd_update_user_msg.py @@ -0,0 +1,69 @@ +# SQLite3/bd_func/bd_update_user_msg.py +# Обновление данных о сообщениях пользователя в базу данных bd|message + +import sqlite3 +from aiogram import types +from datetime import timezone, datetime, timedelta + +from BotLibrary import types_message +from ProjectsFiles import BotVar + +# Настройка экспорта в модули +__all__ = ("update_user_messages",) + + +# Функция обновления статистики сообщений пользователя +async def update_user_messages(tg_id: int, message: types.Message, bd_name: str = BotVar.bd_names): + with sqlite3.connect(bd_name) as db: + cursor = db.cursor() + cursor.execute("SELECT user_id FROM users WHERE tg_id = ?", (tg_id,)) + user_id = cursor.fetchone() + if not user_id: + return # Пользователь не найден + user_id = user_id[0] + + # Проверяем, существует ли запись в 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,)) + result = cursor.fetchone() + + now = message.date.astimezone(timezone.utc) # Время сообщения в UTC + last_message = message.text or types_message(message) + last_message_id = message.message_id + + if result: + last_message_time, messages_per_day, messages_per_week, messages_per_month, total_messages = result + if last_message_time: + last_message_time = datetime.fromisoformat(last_message_time).astimezone(timezone.utc) + # Сбрасываем статистику по времени + if now - last_message_time >= timedelta(days=1): + messages_per_day = 0 + if now - last_message_time >= timedelta(weeks=1): + messages_per_week = 0 + if now - last_message_time >= timedelta(days=30): + messages_per_month = 0 + else: + messages_per_day, messages_per_week, messages_per_month = 0, 0, 0 + + # Увеличиваем счетчики + messages_per_day += 1 + messages_per_week += 1 + messages_per_month += 1 + total_messages += 1 + else: + # Если записи нет, создаем новую (хотя это уже должно быть сделано в add_user) + 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 (?, ?, ?, ?, ?, ?, ?, ?)', + (user_id, last_message, last_message_id, now.isoformat(), messages_per_day, messages_per_week, messages_per_month, total_messages)) + db.commit() + return + + # Обновляем существующую запись + cursor.execute(''' + UPDATE user_messages + SET last_message = ?, last_message_id = ?, last_message_time = ?, + messages_per_day = ?, messages_per_week = ?, messages_per_month = ?, + total_messages = ? + WHERE user_id = ? + ''', (last_message, last_message_id, now.isoformat(), messages_per_day, + messages_per_week, messages_per_month, total_messages, user_id)) + db.commit()