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

@@ -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:
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_id = message.from_user.id # Используем user_id напрямую
# Проверяем, существует ли запись в 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()
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_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):
last_message_time = datetime.fromisoformat(last_message_time).astimezone(timezone(timedelta(hours=3)))
last_date = last_message_time.date()
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
if now - last_message_time >= timedelta(weeks=1):
if last_week != start_of_week:
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
else:
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
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))