161 lines
7.3 KiB
Python
161 lines
7.3 KiB
Python
from datetime import datetime, date
|
||
from typing import Any
|
||
from utils import create_connection
|
||
|
||
|
||
def presence_user_bd(user_id: int) -> tuple:
|
||
"""Проверяем, существует ли пользователь в таблице users """
|
||
conn = create_connection()
|
||
cursor = conn.cursor()
|
||
cursor.execute("SELECT * FROM users WHERE telegram_id = %s", (user_id,))
|
||
return cursor.fetchone()
|
||
|
||
def adding_user_db(user_id: int, username: str) -> None:
|
||
"""Добавление пользователя в таблицу users (имя и id)"""
|
||
conn = create_connection()
|
||
cursor = conn.cursor()
|
||
cursor.execute(
|
||
"INSERT INTO users (telegram_id, telegram_username) VALUES (%s, %s)",
|
||
(user_id, username))
|
||
conn.commit()
|
||
|
||
|
||
def update_user_db(cursor: Any, thread_id: int, telegram_id: int) -> None:
|
||
"""Обновление данных по пользователю в таблице users. Добавление айди чата приватного с ботом """
|
||
cursor.execute("UPDATE users SET telegram_thread_id = %s WHERE telegram_id = %s", (thread_id, telegram_id))
|
||
|
||
|
||
def user_search(cursor: Any, message_thread_id: int) -> tuple:
|
||
"""Поиск пользователя по id в таблице users """
|
||
cursor.execute("SELECT * FROM users WHERE telegram_thread_id = %s", (message_thread_id,))
|
||
return cursor.fetchone()
|
||
|
||
|
||
def adding_well(cursor: Any, well: int) -> None:
|
||
""" Запись курса доллара в таблицу USD_RUB """
|
||
cursor.execute("REPLACE INTO USD_RUB (id, well) VALUES (%s, %s)", (1, well))
|
||
|
||
|
||
def getting_course(cursor: Any) -> tuple:
|
||
""" Получение курса из таблицы USD_RUB """
|
||
cursor.execute("SELECT * FROM USD_RUB WHERE id = 1;")
|
||
return cursor.fetchone()
|
||
|
||
|
||
def installation_one_question(cursor: Any, telegram_id: int) -> None:
|
||
""" Установка единицы в столбце question_time, чтобы блокировать дальнейшие отправки """
|
||
new = 1
|
||
cursor.execute("UPDATE users SET question_time = %s WHERE telegram_id = %s", (new, telegram_id))
|
||
|
||
|
||
def installation_zero_question(cursor: Any, telegram_id: int) -> None:
|
||
""" Установка нуля в столбце question_time, чтобы разблокировать дальнейшие отправки вопросов """
|
||
new = 0
|
||
cursor.execute("UPDATE users SET question_time = %s WHERE telegram_id = %s", (new, telegram_id))
|
||
|
||
|
||
def status_question(cursor: Any, telegram_id: int) -> tuple:
|
||
""" Получение статуса вопроса (1 или 0) """
|
||
cursor.execute("SELECT question_time FROM users WHERE telegram_id = %s", (telegram_id,))
|
||
return cursor.fetchone()
|
||
|
||
|
||
def write_hash_to_table(cursor: Any, hash_user: str, telegram_id: int) -> None:
|
||
""" Запись успешного хэша в successful_hash """
|
||
cursor.execute("INSERT INTO successful_hash (hash_users, telegram_id) VALUES (%s, %s)", (hash_user, telegram_id))
|
||
|
||
|
||
def search_hash_in_table(cursor: Any, hash_user: str,) -> bool:
|
||
""" Поиск хэша в таблице successful_hash """
|
||
cursor.execute("SELECT EXISTS(SELECT 1 FROM successful_hash WHERE hash_users = %s)", (hash_user,))
|
||
result = cursor.fetchone()
|
||
return result[0] if result else False
|
||
|
||
|
||
def number_of_streams_from_subscriptions(cursor: Any, telegram_id: int) -> None:
|
||
""" Запись 3 ед в столбец count_streams, при условии что нет активной подписки """
|
||
new = 3
|
||
cursor.execute(
|
||
"UPDATE users SET count_streams = count_streams + %s "
|
||
"WHERE telegram_id = %s AND (sub_datetime_end IS NULL OR sub_datetime_end = '0')",
|
||
(new, telegram_id)
|
||
)
|
||
|
||
|
||
def number_of_threads_from_threads(cursor: Any, telegram_id: int, price_usd: int) -> None:
|
||
""" Плюсование на количество потоков в столбец count_streams к уже существующему значению """
|
||
cursor.execute("UPDATE users SET count_streams = count_streams + %s WHERE telegram_id = %s",
|
||
(price_usd, telegram_id))
|
||
|
||
|
||
def get_user_data(cursor: Any, telegram_id: int) -> tuple:
|
||
""" Получаем кортеж с данными по пользователю из бд из таблицы users """
|
||
cursor.execute("SELECT * FROM users WHERE telegram_id = %s", (telegram_id,))
|
||
return cursor.fetchone()
|
||
|
||
|
||
# def subscription_entry(cursor: Any, telegram_id: int, price_usd: int) -> None:
|
||
# """ Запись подписки в столбец subscription_option """
|
||
# new = f"{price_usd} мес"
|
||
# cursor.execute(
|
||
# "UPDATE users SET subscription_option = %s WHERE telegram_id = %s "
|
||
# "AND (sub_datetime_end IS NULL OR sub_datetime_end = '0')",
|
||
# (new, telegram_id)
|
||
# )
|
||
def subscription_entry(cursor: Any, telegram_id: int, price_usd: int) -> None:
|
||
""" Запись количества месяцев в subscription_option """
|
||
cursor.execute("UPDATE users SET subscription_option = subscription_option + %s WHERE telegram_id = %s",
|
||
(price_usd, telegram_id))
|
||
|
||
|
||
def subscription_end_record(cursor, telegram_id: int) -> None:
|
||
""" Запись даты окончания подписки в столбцы sub_datetime_end и subscription_endtime_bot """
|
||
current_date = datetime.now() # Получение текущей даты
|
||
# Получение количества месяцев из столбца subscription_option
|
||
select_query = """SELECT subscription_option FROM users WHERE telegram_id = %s"""
|
||
cursor.execute(select_query, (telegram_id,))
|
||
result = cursor.fetchone()
|
||
# Преобразование значения в число
|
||
if result:
|
||
subscription_option = result[0]
|
||
if isinstance(subscription_option, str): # Проверка типа данных
|
||
subscription_option = int(subscription_option.split()[0])
|
||
else:
|
||
return
|
||
# Формирование запроса на обновление
|
||
update_query = """
|
||
UPDATE users
|
||
SET sub_datetime_end = DATE_ADD(NOW(), INTERVAL %s MONTH),
|
||
subscription_endtime_bot = DATE_ADD(NOW(), INTERVAL %s MONTH)
|
||
WHERE telegram_id = %s
|
||
"""
|
||
cursor.execute(update_query, (subscription_option, subscription_option, telegram_id))
|
||
|
||
|
||
def check_expired_subscriptions() -> list:
|
||
""" Получение списка id пользователей, у которых просрочена подписка """
|
||
conn = create_connection()
|
||
cursor = conn.cursor()
|
||
current_date = date.today()
|
||
query = """SELECT telegram_id FROM users WHERE subscription_endtime_bot < %s"""
|
||
cursor.execute(query, (current_date,))
|
||
results = cursor.fetchall()
|
||
expired_users = [result[0] for result in results]
|
||
return expired_users
|
||
|
||
|
||
def reset_user_data(telegram_id: int) -> None:
|
||
"""Обнуляет данные по подписке у пользователя в таблице."""
|
||
conn = create_connection()
|
||
cursor = conn.cursor()
|
||
update_query = """
|
||
UPDATE users
|
||
SET sub_datetime_end = 0,
|
||
subscription_option = 0,
|
||
subscription_endtime_bot = NULL,
|
||
count_streams = 0
|
||
WHERE telegram_id = %s
|
||
"""
|
||
cursor.execute(update_query, (telegram_id,))
|
||
conn.commit()
|