1.8 Исправление ошибок с БД
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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('''
|
||||
|
||||
@@ -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 = ?"
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user