vpc_user/user_api/call2user_api.py

110 lines
4.6 KiB
Python

# HERE WE GO
# -------- RUS ---------
# ⚠️ Для тех, кто не понял ⚠️
# Именно здесь вы можете тыкать UserAPI.
# Секция UserAPI - для вас.
#
# ⚠️ Если вы не дружите с асинхроном ⚠️
# То есть не знаете что такое await, async и т.п.
# То, пожалуйста, перейдите в call2user_api_sync.py
#
# Если вы не находитесь на сервере (а вы не находитесь), вам нужно поменять url_prefix.
# Сделать формата 'https://vpc-api.del.pw' (если эта ссылка не устарела)
#
# Секция SystemAPI и call2api.py вам не нужен, но можете его изучить.
# Эта часть кода взаимодействует с SystemAPI, который недоступен.
#
# Для использования просто импортировать этот файл и использовать функции:
# ```
# from call2user_api import *
# ...
# user = await user_in_db(username, user_token)
# ```
# Можете переносить файл куда хотите, но вместе с db.py (функция read() + авто-создание конфигурации)
# ----------------------
# Загрузка префикса UserAPI
# (МЕНЯЙТЕ URL!!! если нужно, в config.json)
from db import read
import asyncio
CONFIG = asyncio.run(read())
url_prefix = CONFIG['user_api_url']
# Библиотеки для работы call()
from aiohttp import ClientSession
from json import loads
async def call(api_url, data, pre=True, fix=True):
url = (url_prefix + api_url) if pre else api_url
async with ClientSession() as session:
async with session.post(url, json=data) as response:
text = await response.text()
try:
json = loads(text)
if 'detail' in json:
return json['detail']
else:
return json
except:
if fix:
return text.replace('"', '')
else:
return text
#------------------------------------------------------------
# UserAPI
#------------------------------------------------------------
# Получение информации о токене
async def get_user_token_info(username, user_token):
data = {'username': username, 'user_token': user_token}
return await call('api/get_user_token_info/', data)
# Получение пользователя (ник, айди ТГ, ДС и т.п.)
async def user_in_db(username, user_token):
data = {'username': username, 'user_token': user_token}
return await call('api/user_in_db/', data)
# Перевод монет
async def transfer_coins(username, user_token,
dst_username, amount):
data = {'username': username, 'user_token': user_token,
'dst_username': dst_username, 'amount': amount}
return await call('api/transfer_coins/', data)
# Получение глобальной статистики
async def get_stats(username, user_token):
data = {'username': username, 'user_token': user_token}
return await call('api/get_stats/', data)
# Создание счёта на оплату, чтобы проверить оплачен ли он
# Использование в боте: /pay <ник> <сумма> <invoice_id>
async def create_invoice(username, user_token, amount=None):
data = {'username': username, 'user_token': user_token}
if amount:
data['amount'] = amount
return await call('api/create_invoice/', data)
# Удаление счёта на оплату по invoice_id
async def delete_invoice(username, user_token, id):
data = {'username': username, 'user_token': user_token, 'id': id}
return await call('api/delete_invoice/', data)
# Получение информации о счёте на оплату:
# конечный получатель, сумма, статус (оплачен/нет: True/False)
async def get_invoice(username, user_token, id):
data = {'username': username, 'user_token': user_token, 'id': id}
return await call('api/get_invoice/', data)
#------------------------- END ------------------------------
#------------------------------------------------------------
# SystemAPI usage only
#------------------------------------------------------------
# Здесь вы ничего не используете, пропускайте
async def register_user_token(token, user_token):
data = {'token': token, 'user_token': user_token}
return await call('api/register_user_token/', data)
async def unregister_user_token(token, user_token):
data = {'token': token, 'user_token': user_token}
return await call('api/unregister_user_token/', data)
#------------------------- END ------------------------------