Добавление синхронной версии вызовов API, ещё комментарии и упрощение
This commit is contained in:
parent
3aa4f7206d
commit
849ad4b2d4
@ -1,5 +1,5 @@
|
|||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from json import dumps, loads
|
from json import loads
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from db import read, write
|
from db import read, write
|
||||||
|
|||||||
@ -4,49 +4,92 @@
|
|||||||
# Именно здесь вы можете тыкать UserAPI.
|
# Именно здесь вы можете тыкать UserAPI.
|
||||||
# Секция UserAPI - для вас.
|
# Секция UserAPI - для вас.
|
||||||
#
|
#
|
||||||
|
# ⚠️ Если вы не дружите с асинхроном ⚠️
|
||||||
|
# То есть не знаете что такое await, async и т.п.
|
||||||
|
# То, пожалуйста, перейдите в call2user_api_sync.py
|
||||||
|
#
|
||||||
# Если вы не находитесь на сервере (а вы не находитесь), вам нужно поменять url_prefix.
|
# Если вы не находитесь на сервере (а вы не находитесь), вам нужно поменять url_prefix.
|
||||||
# Сделать формата 'https://vpc-api.del.pw' (если эта ссылка не устарела)
|
# Сделать формата 'https://vpc-api.del.pw' (если эта ссылка не устарела)
|
||||||
#
|
#
|
||||||
# Секция SystemAPI и call2api.py вам не нужен, но можете его изучить.
|
# Секция SystemAPI и call2api.py вам не нужен, но можете его изучить.
|
||||||
# Эта часть кода взаимодействует с SystemAPI, который недоступен.
|
# Эта часть кода взаимодействует с SystemAPI, который недоступен.
|
||||||
|
#
|
||||||
|
# Для использования просто импортировать этот файл и использовать функции:
|
||||||
|
# ```
|
||||||
|
# from call2user_api import *
|
||||||
|
# ...
|
||||||
|
# user = await user_in_db(username, user_token)
|
||||||
|
# ```
|
||||||
|
# Можете переносить файл куда хотите, но вместе с db.py (функция read() + авто-создание конфигурации)
|
||||||
# ----------------------
|
# ----------------------
|
||||||
|
|
||||||
global url_prefix
|
# Загрузка префикса UserAPI
|
||||||
url_prefix = 'http://127.0.0.1:8010/'
|
# (МЕНЯЙТЕ URL!!! если нужно, в config.json)
|
||||||
|
from db import read
|
||||||
|
import asyncio
|
||||||
|
CONFIG = asyncio.run(read())
|
||||||
|
url_prefix = CONFIG['user_api_url']
|
||||||
|
|
||||||
from call2api import call
|
# Библиотеки для работы 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
|
# UserAPI
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
|
# Получение информации о токене
|
||||||
async def get_user_token_info(username, user_token):
|
async def get_user_token_info(username, user_token):
|
||||||
data = {'username': username, 'user_token': user_token}
|
data = {'username': username, 'user_token': user_token}
|
||||||
return await call('api/get_user_token_info/', data)
|
return await call('api/get_user_token_info/', data)
|
||||||
|
|
||||||
|
# Получение пользователя (ник, айди ТГ, ДС и т.п.)
|
||||||
async def user_in_db(username, user_token):
|
async def user_in_db(username, user_token):
|
||||||
data = {'username': username, 'user_token': user_token}
|
data = {'username': username, 'user_token': user_token}
|
||||||
return await call('api/user_in_db/', data)
|
return await call('api/user_in_db/', data)
|
||||||
|
|
||||||
|
# Перевод монет
|
||||||
async def transfer_coins(username, user_token,
|
async def transfer_coins(username, user_token,
|
||||||
dst_username, amount):
|
dst_username, amount):
|
||||||
data = {'username': username, 'user_token': user_token,
|
data = {'username': username, 'user_token': user_token,
|
||||||
'dst_username': dst_username, 'amount': amount}
|
'dst_username': dst_username, 'amount': amount}
|
||||||
return await call('api/transfer_coins/', data)
|
return await call('api/transfer_coins/', data)
|
||||||
|
|
||||||
|
# Получение глобальной статистики
|
||||||
async def get_stats(username, user_token):
|
async def get_stats(username, user_token):
|
||||||
data = {'username': username, 'user_token': user_token}
|
data = {'username': username, 'user_token': user_token}
|
||||||
return await call('api/get_stats/', data)
|
return await call('api/get_stats/', data)
|
||||||
|
|
||||||
|
# Создание счёта на оплату, чтобы проверить оплачен ли он
|
||||||
|
# Использование в боте: /pay <ник> <сумма> <invoice_id>
|
||||||
async def create_invoice(username, user_token, amount=None):
|
async def create_invoice(username, user_token, amount=None):
|
||||||
data = {'username': username, 'user_token': user_token}
|
data = {'username': username, 'user_token': user_token}
|
||||||
if amount:
|
if amount:
|
||||||
data['amount'] = amount
|
data['amount'] = amount
|
||||||
return await call('api/create_invoice/', data)
|
return await call('api/create_invoice/', data)
|
||||||
|
|
||||||
|
# Удаление счёта на оплату по invoice_id
|
||||||
async def delete_invoice(username, user_token, id):
|
async def delete_invoice(username, user_token, id):
|
||||||
data = {'username': username, 'user_token': user_token, 'id': id}
|
data = {'username': username, 'user_token': user_token, 'id': id}
|
||||||
return await call('api/delete_invoice/', data)
|
return await call('api/delete_invoice/', data)
|
||||||
|
|
||||||
|
# Получение информации о счёте на оплату:
|
||||||
|
# конечный получатель, сумма, статус (оплачен/нет: True/False)
|
||||||
async def get_invoice(username, user_token, id):
|
async def get_invoice(username, user_token, id):
|
||||||
data = {'username': username, 'user_token': user_token, 'id': id}
|
data = {'username': username, 'user_token': user_token, 'id': id}
|
||||||
return await call('api/get_invoice/', data)
|
return await call('api/get_invoice/', data)
|
||||||
@ -56,6 +99,7 @@ async def get_invoice(username, user_token, id):
|
|||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
# SystemAPI usage only
|
# SystemAPI usage only
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
|
# Здесь вы ничего не используете, пропускайте
|
||||||
async def register_user_token(token, user_token):
|
async def register_user_token(token, user_token):
|
||||||
data = {'token': token, 'user_token': user_token}
|
data = {'token': token, 'user_token': user_token}
|
||||||
return await call('api/register_user_token/', data)
|
return await call('api/register_user_token/', data)
|
||||||
|
|||||||
95
user_api/call2user_api_sync.py
Normal file
95
user_api/call2user_api_sync.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# HERE WE GO
|
||||||
|
# -------- RUS ---------
|
||||||
|
# ⚠️ Для тех, кто не понял ⚠️
|
||||||
|
# Именно здесь вы можете тыкать UserAPI.
|
||||||
|
# Секция UserAPI - для вас.
|
||||||
|
#
|
||||||
|
# ⚠️ Если вы хотите с асинхрон ⚠️
|
||||||
|
# Перейдите в call2user_api.py
|
||||||
|
#
|
||||||
|
# Если вы не находитесь на сервере (а вы не находитесь), вам нужно поменять url_prefix.
|
||||||
|
# Сделать формата 'https://vpc-api.del.pw' (если эта ссылка не устарела)
|
||||||
|
#
|
||||||
|
# Секция SystemAPI и call2api.py вам не нужен, но можете его изучить.
|
||||||
|
# Эта часть кода взаимодействует с SystemAPI, который недоступен.
|
||||||
|
#
|
||||||
|
# Для использования просто импортировать этот файл и использовать функции:
|
||||||
|
# ```
|
||||||
|
# from call2user_api_sync import *
|
||||||
|
# ...
|
||||||
|
# user = user_in_db(username, user_token)
|
||||||
|
# ```
|
||||||
|
# Можете переносить файл куда хотите, но вместе с db.py (функция read() + авто-создание конфигурации)
|
||||||
|
# ----------------------
|
||||||
|
|
||||||
|
# Загрузка префикса UserAPI
|
||||||
|
# (МЕНЯЙТЕ URL!!! если нужно, в config.json)
|
||||||
|
from db import read
|
||||||
|
import requests
|
||||||
|
from json import loads
|
||||||
|
|
||||||
|
# Synchronous database read
|
||||||
|
CONFIG = read()
|
||||||
|
url_prefix = CONFIG['user_api_url']
|
||||||
|
|
||||||
|
def call(api_url, data, pre=True, fix=True):
|
||||||
|
url = (url_prefix + api_url) if pre else api_url
|
||||||
|
with requests.Session() as session:
|
||||||
|
response = session.post(url, json=data)
|
||||||
|
text = 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
|
||||||
|
#------------------------------------------------------------
|
||||||
|
# Получение информации о токене
|
||||||
|
def get_user_token_info(username, user_token):
|
||||||
|
data = {'username': username, 'user_token': user_token}
|
||||||
|
return call('api/get_user_token_info/', data)
|
||||||
|
|
||||||
|
# Получение пользователя (ник, айди ТГ, ДС и т.п.)
|
||||||
|
def user_in_db(username, user_token):
|
||||||
|
data = {'username': username, 'user_token': user_token}
|
||||||
|
return call('api/user_in_db/', data)
|
||||||
|
|
||||||
|
# Перевод монет
|
||||||
|
def transfer_coins(username, user_token,
|
||||||
|
dst_username, amount):
|
||||||
|
data = {'username': username, 'user_token': user_token,
|
||||||
|
'dst_username': dst_username, 'amount': amount}
|
||||||
|
return call('api/transfer_coins/', data)
|
||||||
|
|
||||||
|
# Получение глобальной статистики
|
||||||
|
def get_stats(username, user_token):
|
||||||
|
data = {'username': username, 'user_token': user_token}
|
||||||
|
return call('api/get_stats/', data)
|
||||||
|
|
||||||
|
# Создание счёта на оплату, чтобы проверить оплачен ли он
|
||||||
|
# Использование в боте: /pay <ник> <сумма> <invoice_id>
|
||||||
|
def create_invoice(username, user_token, amount=None):
|
||||||
|
data = {'username': username, 'user_token': user_token}
|
||||||
|
if amount:
|
||||||
|
data['amount'] = amount
|
||||||
|
return call('api/create_invoice/', data)
|
||||||
|
|
||||||
|
# Удаление счёта на оплату по invoice_id
|
||||||
|
def delete_invoice(username, user_token, id):
|
||||||
|
data = {'username': username, 'user_token': user_token, 'id': id}
|
||||||
|
return call('api/delete_invoice/', data)
|
||||||
|
|
||||||
|
# Получение информации о счёте на оплату:
|
||||||
|
# конечный получатель, сумма, статус (оплачен/нет: True/False)
|
||||||
|
def get_invoice(username, user_token, id):
|
||||||
|
data = {'username': username, 'user_token': user_token, 'id': id}
|
||||||
|
return call('api/get_invoice/', data)
|
||||||
|
#------------------------- END ------------------------------
|
||||||
@ -49,8 +49,9 @@ class UserToken(SQLModel, table=True):
|
|||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
config_file = 'config.json'
|
config_file = 'config.json'
|
||||||
if not path.exists(config_file):
|
if not path.exists(config_file):
|
||||||
db = {'system_api_token': 'None',
|
db = {'system_api_token': 'You_can_skip_this',
|
||||||
'system_api_url': 'None'}
|
'system_api_url': 'You_can_skip_this',
|
||||||
|
'user_api_url': 'https://vpc-api.del.pw/'}
|
||||||
js = json.dumps(db, indent=2)
|
js = json.dumps(db, indent=2)
|
||||||
with open(config_file, "w") as outfile:
|
with open(config_file, "w") as outfile:
|
||||||
outfile.write(js)
|
outfile.write(js)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user