docker
This commit is contained in:
parent
6e630925a8
commit
12fcb9bfe1
8
.env
8
.env
@ -1,10 +1,10 @@
|
||||
API_TOKEN = "6594413238:AAFahDg955k1GE9a4JE9T9yHyQoJZV5TFEk"
|
||||
API_TOKEN = ""
|
||||
TO_ADRESS = 'TRFBWmb5NkvKuQpYyPaYzZAX46VCUJtiq1'
|
||||
ARBITRUM_API_KEY = 'P61RFT45N63PJYT5MDY1CEHG1US1C5KZZ4'
|
||||
ARBITRUM_ADRESS = '683dc0af0d3797523104b57a7889b97a5871fbbb'
|
||||
ACCOUNT_ID_YK = '438627'
|
||||
SECRET_KEY_YK = 'test_c4W1yT9yzc8WT-d1YvJKGX59yOfXBMpeNtWegH2uJqo'
|
||||
DB_HOST = "localhost"
|
||||
DB_USER = "root"
|
||||
DB_PASSWORD = "vy!f..rVJ7t9tmG"
|
||||
DB_HOST = "db"
|
||||
DB_USER = ""
|
||||
DB_PASSWORD = ""
|
||||
DB_DATABASE = "subscriptions"
|
@ -5,22 +5,12 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="9e9f83d0-9771-4593-86bc-13be9ebfba22" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/.env" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/subscriptions.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/admin.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/bot.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/database_queries.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/states.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/test.py" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/utils.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Dockerfile" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/README" beforeDir="false" afterPath="$PROJECT_DIR$/README" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/bot.py" beforeDir="false" afterPath="$PROJECT_DIR$/bot.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/database_queries.py" beforeDir="false" afterPath="$PROJECT_DIR$/database_queries.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/docker-compose.yaml" beforeDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
29
README
29
README
@ -0,0 +1,29 @@
|
||||
2. Установите необходимые зависимости:
|
||||
|
||||
pip install -r requirements.txt
|
||||
|
||||
3. Настройте переменные окружения:
|
||||
Создайте файл .env и добавьте необходимые переменные, такие как API-ключи и идентификаторы.
|
||||
|
||||
## Использование
|
||||
|
||||
Запустите приложение:
|
||||
python main.py
|
||||
|
||||
### Команды
|
||||
|
||||
- /start - Запускает бота и показывает меню.
|
||||
- /faq - Показать часто задаваемые вопросы.
|
||||
- /my_subscription - Показать информацию о подписке.
|
||||
- /ask_question - Задать вопрос.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
|
||||
│
|
||||
├── main.py # Основной файл приложения
|
||||
├── bot.py # Логика бота
|
||||
├── database.py # Работа с базой данных
|
||||
├── handlers.py # Обработчики команд и событий
|
||||
├── requirements.txt # Список зависимостей
|
||||
└── README.md # Этот файл
|
1
bot.py
1
bot.py
@ -1,4 +1,3 @@
|
||||
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
import datetime
|
||||
|
@ -94,14 +94,6 @@ def get_user_data(cursor: Any, telegram_id: int) -> tuple:
|
||||
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",
|
||||
|
@ -1,12 +1,20 @@
|
||||
version: "3.9"
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
bot:
|
||||
build: .
|
||||
container_name: aiogram_bot
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
- API_TOKEN=${API_TOKEN}
|
||||
restart: unless-stopped
|
||||
services:
|
||||
db:
|
||||
image: mysql:8.0
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_DATABASE: ${DB_DATABASE}
|
||||
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
|
||||
|
||||
bot:
|
||||
build: .
|
||||
restart: always
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "5000:5000"
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
|
7
main.py
7
main.py
@ -3,7 +3,8 @@ import os
|
||||
from aiogram import Bot, Dispatcher
|
||||
import asyncio
|
||||
import bot
|
||||
from utils import get_usd_rub_course, checking_and_deleting_users
|
||||
from utils import get_usd_rub_course, checking_and_deleting_users, check_table_exists_users, check_table_exists_usd_rub, \
|
||||
check_table_exists_successful_hash
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from dotenv import load_dotenv
|
||||
|
||||
@ -21,6 +22,10 @@ async def main() -> None:
|
||||
""" Запуск бота """
|
||||
dp.include_router(bot.router)
|
||||
scheduler = AsyncIOScheduler()
|
||||
check_table_exists_users()
|
||||
check_table_exists_usd_rub()
|
||||
check_table_exists_successful_hash()
|
||||
await get_usd_rub_course()
|
||||
# Планируем выполнение функции в 12:00, 18:00 и 00:00 планировщиком
|
||||
scheduler.add_job(get_usd_rub_course, 'cron', hour='12,18,0')
|
||||
# Планируем выполнение функции checking_and_deleting_users ежедневно в 00:12
|
||||
|
79
utils.py
79
utils.py
@ -123,3 +123,82 @@ async def checking_and_deleting_users() -> None:
|
||||
reset_user_data(id_user)
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
|
||||
|
||||
def check_table_exists_users():
|
||||
""" Проверяет, существует ли таблица users в базе данных. Если таблицы нет, создает ее """
|
||||
conn = create_connection()
|
||||
cursor = conn.cursor()
|
||||
# Запрос для проверки существования таблицы
|
||||
cursor.execute(f"""
|
||||
SELECT 1
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = '{os.getenv('DB_DATABASE')}'
|
||||
AND table_name = 'users';
|
||||
""")
|
||||
exists = cursor.fetchone() is not None
|
||||
# Если таблица не существует, создаем ее
|
||||
if not exists:
|
||||
cursor.execute(f"""
|
||||
CREATE TABLE users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
telegram_id BIGINT NOT NULL,
|
||||
telegram_username VARCHAR(255) NOT NULL,
|
||||
zennolab_id VARCHAR(255) DEFAULT NULL,
|
||||
sub_datetime_end BIGINT UNSIGNED DEFAULT NULL,
|
||||
threads_count INT DEFAULT NULL,
|
||||
telegram_thread_id BIGINT DEFAULT NULL,
|
||||
question_time INT DEFAULT NULL,
|
||||
count_streams INT DEFAULT NULL,
|
||||
subscription_option VARCHAR(255) DEFAULT NULL,
|
||||
subscription_end_date DATE DEFAULT NULL);""")
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
|
||||
def check_table_exists_usd_rub():
|
||||
""" Проверяет, существует ли таблица USD_RUB в базе данных. Если таблицы нет, создает ее """
|
||||
conn = create_connection()
|
||||
cursor = conn.cursor()
|
||||
# Запрос для проверки существования таблицы
|
||||
cursor.execute(f"""
|
||||
SELECT 1
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = '{os.getenv('DB_DATABASE')}'
|
||||
AND table_name = 'USD_RUB';
|
||||
""")
|
||||
exists = cursor.fetchone() is not None
|
||||
# Если таблица не существует, создаем ее
|
||||
if not exists:
|
||||
cursor.execute(f"""
|
||||
CREATE TABLE USD_RUB (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
well FLOAT DEFAULT 0);""")
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
|
||||
def check_table_exists_successful_hash():
|
||||
""" Проверяет, существует ли таблица successful_hash в базе данных. Если таблицы нет, создает ее """
|
||||
conn = create_connection()
|
||||
cursor = conn.cursor()
|
||||
# Запрос для проверки существования таблицы
|
||||
cursor.execute(f"""
|
||||
SELECT 1
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = '{os.getenv('DB_DATABASE')}'
|
||||
AND table_name = 'successful_hash';
|
||||
""")
|
||||
exists = cursor.fetchone() is not None
|
||||
# Если таблица не существует, создаем ее
|
||||
if not exists:
|
||||
cursor.execute(f"""
|
||||
CREATE TABLE successful_hash (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
hash_users VARCHAR(255) NOT NULL,
|
||||
telegram_id BIGINT NOT NULL);""")
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
Loading…
Reference in New Issue
Block a user