153 lines
6.9 KiB
Python
153 lines
6.9 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 """
|
|||
|
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()
|