October 18, 2023

Donate

Наш модуль `donate` предоставляет инструменты для обработки пожертвований.

Этот модуль содержит классы и функции, которые позволяют управлять данными о пожертвованиях, а также выполнять различные операции над ними.

Важно подметить что модуль Donate будет иметь несколько способов обработки пожертвований

Для быстрого перемещения:

Доступные способы донатов

  1. TonRocket - Сервис который предоставляет тонну функций, таких как отправка, получение и других полезных функций (Crypto)
  2. Crypto - Сервис который предоставляет тонну функций, таких как отправка, получение и других полезных функций (Crypto)
  3. скоро...

Функции

TonRocket

  1. version - возвращает текущую версию сервиса
  2. info - возвращает информацию про ваше приложение
  3. transfer - отправляет крипту другому пользователю через его айди
  4. withdrawal - Вывод на кошелек по его адресу
  5. create - создает счет после возвращает нужную информацию про создание
  6. get_me - возвращает информацию про все счета
  7. check - показывает информацию про счет по его айди
  8. delete - удаляет счет по его айди

CryptoBot

  1. get_me - Возвращает информацию про ваше приложение в CryptoBot
  2. create - создает счет после возвращает нужную информацию про создание
  3. transfer - отправляет крипту другому пользователю через его айди
  4. get_invoices - возвращает информацию про все счета
  5. rates - возвращает соотношений токенов к рублю
  6. currencies - возвращает все токены

RuKassa

  1. create - Создает счет в вашем мерчанте через токен
  2. info - Возвращает информацию про счет через его айди
  3. withdraw_info - возвращает информацию про вывод из сайта Rukassa
  4. get_balance - Получаем баланс аккаунта из Rukassa
  5. create_withdraw - запросить вывод на карту из сайта Rukassa
  6. cancel_withdraw - Отменить вывод

Другое

  1. generator - возвращает полностью заполнений пример данных для создания счета для Donate_init из TonRocket

Классы

TonRocket

  1. Client - пользовательский клиент в котором находятся основные функции
  2. User - Класс который предоставляет такие функции как user_agent, timeline

Другое

  1. Data - класс который хранит в себе функцию generator

Декораторы

TonRocket

  1. Donate_init - декоратор который инициализирует функцию доната, возвращает вам ссылку для оплаты после проверяет этот счет на протяжении expiredIn, если счет не будет оплачен он возвратит False, так же если счет будет оплачен он возвратит paid и телеграмм айди человека который оплатил

Exceptions

TonRocket

Unauthorized

message="[Error]: Unauthorized"

Ошибка обозначает то что вы не ввели ключ либо он не действителен

ExpiredIn

message="[Error]: ExpiredIn must be at least 60 seconds!"

Ошибка обозначает то что ExpiredIn в декораторе(@Donate_init) должен быть не меньше чем 60 секунд

BadRequest

{
  "success": false,
  "message": "Error Message",
  "errors": [
    {
      "property": "somePropertyName",
      "error": "somePropertyName should be less than X"
    }
  ]
}

Forbidden

{
  "success": false,
  "message": "Error Message"
}

Попробуйте использовать ВПН

NotFound

{
  "success": false,
  "message": "Error Message"
}

Страница не найдена. если появилась эта ошибка то немедленно свяжитесь с нами

InternalServerError

{
  "success": false,
  "message": "Error Message"
}

сервер столкнулся с неожиданной ошибкой.

Примеры:

TonRocket

version

from donate.utils.tonrocket import Client

app = Client()
print(app.version())

Возвращает:

{'version': '1.3.1'}

info

from donate.utils.tonrocket import Client

app = Client(api_key="your key")
print(app.info())

Возвращает:

{'success': True, 'data': {'name': 'Red', 'feePercents': 1.5, 'balances': [{'currency': 'TONCOIN', 'balance': 0.011457303}, {'currency': 'SCALE', 'balance': 0}, {'currency': 'BOLT', 'balance': 0}, {'currency': 'TAKE', 'balance': 0}, {'currency': 'HEDGE', 'balance': 0}, {'currency': 'KOTE', 'balance': 0}, {'currency': 'TNX', 'balance': 0}, {'currency': 'GRBS', 'balance': 0}, {'currency': 'AMBR', 'balance': 0}, {'currency': 'jUSDT', 'balance': 0}, {'currency': 'JBCT', 'balance': 0}, {'currency': 'IVS', 'balance': 0}, {'currency': 'LAVE', 'balance': 0}, {'currency': 'DHD', 'balance': 0}]}}

transfer

from donate.utils.tonrocket import Client

app = Client(api_key="your key")
data =  {
"tgUserId": 5968878656,
"currency": "TONCOIN",
"amount": 0.000045,
"description": "test"
}

print(app.transfer(data=data))

Возвращает:

{'success': True, 'data': {'id': 17051043, 'currency': 'TONCOIN', 'tgUserId': 5968878656, 'amount': 4.5e-05, 'description': 'test'}}

Составляем запрос:

  • tgUserId - id получателя
  • currency - токен
  • amount - кол-во для передачи
  • description - описание(его увидит тот кому вы перевели)

create

from donate.utils.tonrocket import Client

app = Client(api_key="your key")
data = {
"amount": 1.23,
"numPayments": 1,
"currency": "TONCOIN",
"description": "best thing in the world, 1 item",
"hiddenMessage": "thank you",
"commentsEnabled": False,
"callbackUrl": "https://t.me/ton_rocket",
"payload": "some custom payload I want to see in webhook or when I request invoice",
"expiredIn": 60
}
print(app.create(data=data))

Возвращает:

{'success': True, 'data': {'id': '223784', 'amount': 4.5e-05, 'minPayment': None, 'currency': 'TONCOIN', 'description': 'best thing in the world, 1 item', 'hiddenMessage': 'thank you', 'commentsEnabled': 0, 'payload': 'some custom payload I want to see in webhook or when I request invoice', 'callbackUrl': 'https://t.me/ton_rocket', 'status': 'active', 'expiredIn': 60, 'link': 'https://t.me/xrocket?start=inv_S2hHZCEV7PZ8KUp', 'activationsLeft': 1, 'totalActivations': 1}}

Составляем запрос:

  • amount - Кол-во токенов
  • numPayments - кол-во активаций
  • description - описание
  • hiddenMessage - сообщение которое будет после оплаты
  • commentsEnabled - комментарии для счета
  • callbackUrl - Ссылка которая будет доступна после оплаты
  • payload - никто не знает что оно делает
  • expiredIn - таймер работы счета(0 - таймер отключен, к примеру 60 - счет будет просрочен через 60 секунд)

get_me

from donate.utils.tonrocket import Client

app = Client(api_key="your key")

print(app.get_me())

Возвращает:

{'success': True, 'data': {'total': 6, 'offset': 0, 'limit': 100, 'results': [{'id': '223784', 'amount': 4.5e-05, 'minPayment': None, 'currency': 'TONCOIN', 'description': 'best thing in the world, 1 item', 'hiddenMessage': 'thank you', 'commentsEnabled': 0, 'payload': 'some custom payload I want to see in webhook or when I request invoice', 'callbackUrl': 'https://t.me/ton_rocket', 'created': '2023-10-19T06:34:57.000Z', 'paid': None, 'status': 'expired', 'expiredIn': 60, 'link': 'https://t.me/xrocket?start=inv_S2hHZCEV7PZ8KUp', 'activationsLeft': 1, 'totalActivations': 1}]

check

from donate.utils.tonrocket import Client

app = Client(api_key="your key")

print(app.check(id=223784))

Возвращает:

{'success': True, 'data': {'id': '223784', 'amount': 4.5e-05, 'minPayment': None, 'currency': 'TONCOIN', 'description': 'best thing in the world, 1 item', 'hiddenMessage': 'thank you', 'commentsEnabled': 0, 'payload': 'some custom payload I want to see in webhook or when I request invoice', 'callbackUrl': 'https://t.me/ton_rocket', 'created': '2023-10-19T06:34:57.000Z', 'paid': None, 'status': 'expired', 'expiredIn': 60, 'link': 'https://t.me/xrocket?start=inv_S2hHZCEV7PZ8KUp', 'activationsLeft': 1, 'totalActivations': 1, 'payments': []}}

Составляем запрос:

  • id - айди счета который мы можем получить из get_me или create

delete

from donate.utils.tonrocket import Client

app = Client(api_key="your key")

print(app.delete(id=223784))

Возвращает:

{'success': True}

Составляем запрос:

  • id - айди счета который мы можем получить из get_me или create

CryptoBot

get_me

from donate.utils.crypto import Client

app = Client(api_key="your key")
print(app.get_me())

Возвращает:

{'ok': True, 'result': {'app_id': 126081, 'name': 'Wambly Shrimp App', 'payment_processing_bot_username': 'CryptoBot'}, 'balance': [{'currency_code': 'USDT', 'available': '0'}, {'currency_code': 'TON', 'available': '0.0097'}, {'currency_code': 'BTC', 'available': '0'}, {'currency_code': 'LTC', 'available': '0'}, {'currency_code': 'ETH', 'available': '0'}, {'currency_code': 'BNB', 'available': '0'}, {'currency_code': 'TRX', 'available': '0'}, {'currency_code': 'USDC', 'available': '0'}]}

create

from donate.utils.crypto import Client

data = {
	"asset": "TON",
	"amount": 0.01,
	"description": "test",
	"hidden_message": "test",
	"paid_btn_name": "viewItem",
	"paid_btn_url": "https://help.crypt.bot/crypto-pay-api#Invoice",
	"allow_comments": False,
	"allow_anonymous": False,
	"expires_in": 60}
	
app = Client(api_key="your key")

print(app.create(data=data))

Возвращает:

{'ok': True, 'result': {'invoice_id': 3897550, 'status': 'active', 'hash': 'IVsFtiIr4CL7', 'asset': 'TON', 'amount': '0.01', 'pay_url': 'https://t.me/CryptoBot?start=IVsFtiIr4CL7', 'description': 'test', 'created_at': '2023-10-20T15:53:59.419Z', 'allow_comments': False, 'allow_anonymous': False, 'expiration_date': '2023-10-20T15:54:59.411Z', 'hidden_message': 'test', 'paid_btn_name': 'viewItem', 'paid_btn_url': 'https://help.crypt.bot/crypto-pay-api#Invoice'}}

Составляем запрос:

  • asset - токен
  • amount - Кол-во токенов
  • description - описание счета
  • hidden_message - сообщение которое будет доступно после оплаты
  • paid_btn_name(optional) - название для кнопки
  • paid_btn_url(optional) - ссылка для этой же кнопки
  • allow_comments(optional) - разрешение на комментарии
  • allow_anonymous(optional) - разрешение на анонимный просмотр
  • expires_in - когда счет станет не действительным(1-240000)

transfer

from donate.utils.crypto import Client

data = {
	"user_id": 5968878656,
	"asset": "TON",
	"amount": 1,
	"spend_id": 623482423712389,
	"comment": "Hello",
	"disable_send_notification": False}

app = Client(api_key="your key")

print(app.transfer(data=data))

Возвращает:

{'ok': True, 'result': {'transfer_id': 623482423712389, 'user_id': 5968878656, ...}

Составляем запрос:

  • user_id - телеграмм айди человека которому будем отправлять токены
  • asset - название токена
  • amount - кол-во токенов для передачи
  • spend_id - уникальный айди, айди не должен повторятся!
  • comment - комментарий к переводу
  • disable_send_notification - если False то user_id получит сообщение про перевод, если True то user_id не получит сообщение

get_invoices

from donate.utils.crypto import Client

data = {"invoice_ids": [3891640]}

app = Client(api_key="your key")

print(app.get_invoices(data=data))

Возвращает:

{'ok': True, 'result': {'items': [{'invoice_id': 3891640, 'status': 'paid', 'hash': 'IVL3PjShk1xU', 'asset': 'TON', 'amount': '0.01', 'pay_url': 'https://t.me/CryptoBot?start=IVL3PjShk1xU', 'description': 'test', 'created_at': '2023-10-20T09:38:18.037Z', 'allow_comments': False, 'allow_anonymous': False, 'expiration_date': '2023-10-20T09:39:18.030Z', 'paid_at': '2023-10-20T09:38:54.021Z', 'paid_anonymously': False, 'hidden_message': 'test', 'paid_btn_name': 'viewItem', 'paid_btn_url': 'https://help.crypt.bot/crypto-pay-api#Invoice'}]}}

Составляем запрос:

  • asset(optional) - будет искать по тому токену который укажите
  • status(optional) - будет искать все токены по статусу который укажите(к примеру "paid" - будет искать все счета которые оплатили)
  • invoice_ids(optional) - будет искать все счета с айди которые укажите в формате списка []

rates

from donate.utils.crypto import Client

app = Client(api_key="your key")

print(app.rates())

Возвращает:

{'ok': True, 'result': [{'is_valid': True, 'source': 'USDT', 'target': 'RUB', 'rate': '96.81000000'}, {'is_valid': True, 'source': 'USDT', 'target': 'USD', 'rate': '1.00026015'}, {'is_valid': True, 'source': 'USDT', 'target': 'EUR', 'rate': '0.94448600'}, {'is_valid': True, 'source': 'USDT', 'target': 'BYN', 'rate': '3.29358300'}]

currencies

from donate.utils.crypto import Client

app = Client(api_key="your key")

print(app.currencies())

Возвращает:

{'ok': True, 'result': [{'is_blockchain': False, 'is_stablecoin': True, 'is_fiat': False, 'name': 'Tether', 'code': 'USDT', 'url': 'https://tether.to/', 'decimals': 18}, {'is_blockchain': True, 'is_stablecoin': False, 'is_fiat': False, 'name': 'Toncoin', 'code': 'TON', 'url': 'https://ton.org/', 'decimals': 9}]

user_agent

from donate.utils.tonrocket.types import User
import asyncio

async def main():
	print(await User().user_agent())

asyncio.run(main())

Возвращает:

Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36

timeline

from donate.utils.tonrocket.types import User
import asyncio

async def main():
	print(await User().timeline())

asyncio.run(main())

Возвращает:

['2023-10-23T12:00:00', '2023-10-23T12:01:00', '2023-10-23T12:02:00', '2023-10-23T12:03:00', '2023-10-23T12:04:00', '2023-10-23T12:05:00', ...]

RuKassa

create

from donate.utils.rukassa import Client

app = Client(token="your token")
print(app.create(shop_id=1453, amount=100, data={"userId": "user"}))

Возвращает:

{'id': 3513701, 'hash': 'eb84f5da74040dc7be1f304fb06b0f8b', 'url': 'https://pay.ruks.pro/?hash=eb84f5da74040dc7be1f304fb06b0f8b'}

Составляем запрос:

  • shop_id - ID магазина.
  • amount - Сумма платежа.
  • data - обьект передачи на сервер, при оплате счета мы сможем получить этот обьект через .get()
  • token - API токен из настроек вашего мерчанта.

info

from donate.utils.rukassa import Client

app = Client(token="Your token")
print(app.info(shop_id=1453, id=3513701))

withdraw_info

from donate.utils.rukassa import Client

app = Client(token="Your token")
print(app.withdraw_info(shop_id=1453, id=3513701))

get_balance

from donate.utils.rukassa import Client

app = Client(token="Your token")
print(app.get_balance(email="email", password="password"))

create_withdraw

from donate.utils.rukassa import Client

app = Client(token="b35e5d1302ee1706b5171f0ef15b3999")
print(app.create_withdraw(email="email", password="password", way="CARD", wallet="332328382", amount=100))

Составляем запрос:

  • email - Email пользователя.
  • password - Пароль пользователя.
  • way - Платежная система для вывода. Системы: QIWI, CARD, YOOMONEY, USDT, SBP
  • wallet - Номер кошелька или карты, куда будут отправлены средства.
  • amount - Сумма для вывода.

cancel_withdraw

from donate.utils.rukassa import Client

app = Client(token="b35e5d1302ee1706b5171f0ef15b3999")
print(app.create_withdraw(email="email", password="password", id=0))

Примеры декораторов:

TonRocket

@Donate_init

from donate.utils.tonrocket import Donate_init
import asyncio
data = {
	"amount": 0.000045,
	"numPayments": 1,
	"currency": "TONCOIN",
	"description": "best thing in the world, 1 item",
	"hiddenMessage": "thank you",
	"commentsEnabled": False,
	"callbackUrl": "https://t.me/ton_rocket",
	"payload": "some custom payload I want to see in webhook or when I request invoice",
	"expiredIn": 60
}

@Donate_init(api_key="your key", data=data)
async def say_hello(*args, **kwargs):
	user_id = kwargs.get("user_id")
	status = kwargs.get("status")
	
	if status == False:
		print(f"Не оплачено!")
	elif status != "paid":
		link = kwargs.get("new_data").get("data").get("link")
		print(f"Ссылка на оплату: {link}")
	else:
		print(f"Полеченные данные: status: {status}, айди покупателя: {user_id}")
	return None

async def main():
	await asyncio.create_task(say_hello())
	return None

if __name__ == "__main__":
	loop = asyncio.get_event_loop()
	loop.run_until_complete(main())

Возвращает:

  • user_id - айди пользователя который оплатил счет
  • status - статус счета
  • link - ссылка на оплату

Составляем запрос:

  • Donate_init - передаем в декоратор данные и ключ
  • user_id, status - изначально они равны None
  • status:
    • if status == False - Если счет не был оплачен за это время которое указано в expiredIn, то наш декоратор передает аргумент False в переменную status
    • elif status != "paid" - Как я уже говорил что status изначально равняется None из-за чего - это сигнал скрипту о том что скрипт лишь запущен и нужно вывести ссылку в переменную
    • else - можно заменить на elif status == "paid" - эта часть проверяет оплачен ли счет, если наш декоратор заметил что счет оплачен и передает аргумент paid в переменную status
  • main - пред-функция с которой запускается главный скрипт

Types

Converter

from donate import *

print(Converter(amount=100, from_="USD", to="Rub").convert())
  • amount - количество токенов из from_
  • from_ - валюта из которой будем переводить
  • to - валюта в которую будем переводить

возвращает:

{'amount': 100.0, 'from': 'USD', 'converted_amount': 9235.0, 'to': 'RUB'}

Data

from donate import *

print(Data().generator())

возвращает:

{'amount': 0.5076166886221487, 'numPayments': 1, 'currency': 'TONCOIN', 'description': 'Платеж за услуги', 'hiddenMessage': 'Операция завершена.', 'commentsEnabled': False, 'callbackUrl': 'https://t.me/ton_rocket', 'payload': 'some custom payload I want to see in webhook or when I request invoice', 'expiredIn': 60}

Контакты

[telegram channel](https://t.me/donatepython/)

[monitoring bot](https://t.me/MDLPyPI_bot/)

[Author](https://t.me/Redpiar)