diff --git a/BotCode/routers/commands/user_cmd/__init__.py b/BotCode/routers/commands/user_cmd/__init__.py index 1900db8..6b7c572 100644 --- a/BotCode/routers/commands/user_cmd/__init__.py +++ b/BotCode/routers/commands/user_cmd/__init__.py @@ -7,6 +7,7 @@ from .start_cmd import start_cmd from .start_time_cmd import start_time_cmd from .help_cmd import help_cmd from .weather_cmd import weather_cmd +from .stats import stats_cmd # Объявление роутера и настройка экспорта модулей __all__ = ("router",) @@ -18,6 +19,7 @@ router.include_routers( help_cmd.router, start_time_cmd.router, weather_cmd.router, + stats_cmd.router, ) router.include_routers(start_cmd.router) diff --git a/SQLite3/bd_func/__init__.py b/SQLite3/bd_func/__init__.py index 2bebd11..1518052 100644 --- a/SQLite3/bd_func/__init__.py +++ b/SQLite3/bd_func/__init__.py @@ -20,6 +20,6 @@ async def base_sql(message: types.Message): last_name = message.from_user.last_name 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_messages(tg_id, message) + await update_user_messages(message=message) diff --git a/SQLite3/bd_func/bd_add_user.py b/SQLite3/bd_func/bd_add_user.py index 1d97f1c..4ff170e 100644 --- a/SQLite3/bd_func/bd_add_user.py +++ b/SQLite3/bd_func/bd_add_user.py @@ -9,8 +9,8 @@ __all__ = ("add_user",) # Функция добавления пользователя с последовательным user_id -async def add_user(tg_id: int, username: str, first_name: str, - last_name: str, role: str, status: str, bd_name: str = BotVar.bd_names): +async def add_user(tg_id: int, username: str, first_name: str, last_name: str, + role: str, status: str, user: str, bd_name: str = BotVar.bd_names): with sqlite3.connect(bd_name) as db: cursor = db.cursor() @@ -26,9 +26,9 @@ async def add_user(tg_id: int, username: str, first_name: str, # Добавляем нового пользователя cursor.execute(''' - INSERT INTO users (user_id, tg_id, username, first_name, last_name, role, status) - VALUES (?, ?, ?, ?, ?, ?, ?) - ''', (new_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 (?, ?, ?, ?, ?, ?, ?, ?) + ''', (new_user_id, tg_id, username, first_name, last_name, role, status, user)) # Добавляем запись в user_messages cursor.execute(''' diff --git a/SQLite3/bd_func/bd_update_user.py b/SQLite3/bd_func/bd_update_user.py index 45e3e7d..7f07686 100644 --- a/SQLite3/bd_func/bd_update_user.py +++ b/SQLite3/bd_func/bd_update_user.py @@ -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, - bd_name: str = BotVar.bd_names, role: str = None): + bd_name: str = BotVar.bd_names, role: str = None, user: str = None): updates = [] params = [] @@ -26,6 +26,9 @@ async def update_user(tg_id: int, username: str = None, first_name: str = None, if role: updates.append("role = ?") params.append(role) + if user: + updates.append("user = ?") + params.append(user) if updates: query = f"UPDATE users SET {', '.join(updates)} WHERE tg_id = ?" diff --git a/SQLite3/bd_func/bd_update_user_msg.py b/SQLite3/bd_func/bd_update_user_msg.py index 0f23793..a95ffed 100644 --- a/SQLite3/bd_func/bd_update_user_msg.py +++ b/SQLite3/bd_func/bd_update_user_msg.py @@ -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))