Add base cryptobot

This commit is contained in:
Zakhar Izmaylov
2024-11-11 14:26:00 +03:00
parent a9e06b7a3b
commit 1869db7615
5 changed files with 40 additions and 5 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[flake8]
max-line-length = 200
ignore = E203, E266, E501, W503, F541, E704, W293, W291, E126, E121, E123, E128, E302,E131,E231,W292
ignore = E203, E266, E501, W503, F541, E704, W293, W291, E126, E121, E123, E128, E302, E131, E231, W292, E402
max-complexity = 25
select = B, C, E, F, W, T4, B9
exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,.txt
+1 -2
View File
@@ -1,4 +1,3 @@
[settings]
profile=black
line_length = 200
skip = ["bot.py"]
line_length = 200
+32
View File
@@ -0,0 +1,32 @@
from aiocryptopay import AioCryptoPay, Networks
from aiohttp import web
from loguru import logger
from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN
if CRYPTO_BOT_ENABLE:
crypto = AioCryptoPay(token=CRYPTO_BOT_TOKEN, network=Networks.MAIN_NET)
async def cryptobot_webhook(request):
try:
data = await request.json()
logger.info(f"Получены данные вебхука: {data}")
if data.get("update_type") == "invoice_paid":
await process_crypto_payment(data["payload"])
return web.Response(status=200)
else:
logger.warning(f"Неподдерживаемый тип обновления: {data.get('update_type')}")
return web.Response(status=400)
except Exception as e:
logger.error(f"Ошибка обработки вебхука: {e}")
return web.Response(status=500)
async def process_crypto_payment(payload):
if payload["status"] == "paid":
custom_payload = payload["payload"]
user_id, sub_type = custom_payload.split(":")
# TODO
else:
logger.warning(f"Получен неоплаченный инвойс: {payload}")
+4 -1
View File
@@ -7,12 +7,13 @@ from loguru import logger
from backup import backup_database
from bot import bot, dp, router
from config import FREEKASSA_ENABLE, SUB_PATH, WEBAPP_HOST, WEBAPP_PORT, WEBHOOK_PATH, WEBHOOK_URL, YOOKASSA_ENABLE
from config import CRYPTO_BOT_ENABLE, FREEKASSA_ENABLE, SUB_PATH, WEBAPP_HOST, WEBAPP_PORT, WEBHOOK_PATH, WEBHOOK_URL, YOOKASSA_ENABLE
from database import init_db
from handlers.keys.subscriptions import handle_subscription
from handlers.notifications import notify_expiring_keys
from handlers.payment.freekassa_pay import freekassa_webhook
from handlers.payment.yookassa_pay import yookassa_webhook
from handlers.payment.cryprobot_pay import cryptobot_webhook
async def periodic_notifications():
@@ -60,6 +61,8 @@ async def main():
app.router.add_post("/yookassa/webhook", yookassa_webhook)
if FREEKASSA_ENABLE:
app.router.add_post("/freekassa/webhook", freekassa_webhook)
if CRYPTO_BOT_ENABLE:
app.router.add_post("/cryptobot/webhook", cryptobot_webhook)
app.router.add_get(f"{SUB_PATH}{{email}}", handle_subscription)
SimpleRequestHandler(dispatcher=dp, bot=bot).register(app, path=WEBHOOK_PATH)
+2 -1
View File
@@ -25,4 +25,5 @@ urllib3==2.2.3
wrapt==1.16.0
yarl==1.15.5
yookassa==3.3.0
loguru
loguru
aiocryptopay