mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 15:14:18 +02:00
Commited backup
This commit is contained in:
247
idiotcoders/idiotmodules/yoomoney.py
Normal file
247
idiotcoders/idiotmodules/yoomoney.py
Normal file
@@ -0,0 +1,247 @@
|
||||
# meta pic: https://static.whypodg.me/mods!yoomoney.png
|
||||
# meta banner: https://mods.whypodg.me/badges/yoomoney.jpg
|
||||
# meta developer: @idiotcoders
|
||||
# scope: hikka_only
|
||||
# scope: hikka_min 1.2.10
|
||||
# requires: yoomoney
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import requests
|
||||
import yoomoney
|
||||
|
||||
from .. import loader, utils
|
||||
from hikkatl.types import Message
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class YooMoneyMod(loader.Module):
|
||||
"""Yoomoney Module."""
|
||||
|
||||
strings = {
|
||||
"name": "YooMoney",
|
||||
"_cfg_token": "Pass the API token from your YooMoney account. If you don't know how to get it, use the .yauth command",
|
||||
"need_auth": "<emoji document_id=5312526098750252863>❌</emoji> <b>Call</b> <code>.yauth</code> <b>before using this action.</b>",
|
||||
"auth": (
|
||||
"🔐 <b>Follow the link in the button, approve request, then</b> <code>.ycode https://...</code> <b>with redirected url</b>\n\n"
|
||||
"<b>As example:</b> <code>.ycode https://yoomoney.whypodg.me/?code=1234zxcv5678</code> <b>OR</b> <code>.ycode 1234zxcv5678</code>"
|
||||
),
|
||||
"yoomoney_error": (
|
||||
"<emoji document_id=5312526098750252863>❌</emoji> <b>An YooMoney API error has occured!</b>\n\n"
|
||||
"<b>API returned this response:</b>\n<code>{}</code>"
|
||||
),
|
||||
"successful_auth": "<emoji document_id=5280757711720423435>💜</emoji> <b>Auth successful</b>",
|
||||
"follow_me": "Follow me",
|
||||
"statuses": {
|
||||
"anonymous": "<emoji document_id=5371017798065592581>👻</emoji> <b>Anonymous</b>",
|
||||
"named": "<emoji document_id=5370900820336319679>🥰</emoji> <b>Reviewed</b>",
|
||||
"identified": "<emoji document_id=5388929052935462187>😎</emoji> <b>Identified</b>"
|
||||
},
|
||||
"out": (
|
||||
"<emoji document_id=5280757711720423435>💜</emoji> <b>Your YooMoney wallet info:</b>\n\n"
|
||||
"<emoji document_id=5974526806995242353>🆔</emoji> <b>Wallet ID:</b> <code>{id}</code>\n"
|
||||
"<emoji document_id=5850654130497916523>✅️</emoji> <b>Wallet status:</b> {status}\n"
|
||||
"<emoji document_id=5357315181649076022>📂</emoji> <b>Wallet type:</b> <code>{type}</code>\n"
|
||||
"<emoji document_id=5328236964564967681>🤑</emoji> <b>Balance:</b> <code>{balance}₽</code>"
|
||||
),
|
||||
"payme": "<b>📄 {}\n<a href='{}'>Pay {} RUB 💳</a></b>",
|
||||
"args": "<b>🚫 Incorrect args</b>"
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"_cfg_token": "Введите API токен ЮMoney аккаунта. Если не знаешь, как его получить — используй команду .yauth",
|
||||
"need_auth": (
|
||||
"<emoji document_id=5312526098750252863>❌</emoji> <b>Выполни</b> <code>.yauth</code> "
|
||||
"<b>перед выполнением этого действия.</b>"
|
||||
),
|
||||
"auth": (
|
||||
"🔐 <b>Перейдите по ссылке в кнопке, одобрите запрос, затем используйте</b> <code>.ycode https://...</code> "
|
||||
"<b>с URL-адресом, куда вас перенаправило</b>\n\n"
|
||||
"<b>Пример:</b> <code>.ycode https://yoomoney.whypodg.me/?code=1234zxcv5678</code> <b>ИЛИ</b> <code>.ycode 1234zxcv5678</code>"
|
||||
),
|
||||
"yoomoney_error": (
|
||||
"<emoji document_id=5312526098750252863>❌</emoji> <b>Произошла ошибка ЮMoney!</b>\n\n"
|
||||
"<b>API вернуло такой ответ:</b>\n<code>{}</code>"
|
||||
),
|
||||
"successful_auth": "<emoji document_id=5280757711720423435>💜</emoji> <b>Успешная аутентификация</b>",
|
||||
"follow_me": "Перейди по мне",
|
||||
"statuses": {
|
||||
"anonymous": "<emoji document_id=5371017798065592581>👻</emoji> <b>Анонимный</b>",
|
||||
"named": "<emoji document_id=5370900820336319679>🥰</emoji> <b>Именной</b>",
|
||||
"identified": "<emoji document_id=5388929052935462187>😎</emoji> <b>Идентифицированный</b>"
|
||||
},
|
||||
"out": (
|
||||
"<emoji document_id=5280757711720423435>💜</emoji> <b>Информация о ЮMoney кошельке:</b>\n\n"
|
||||
"<emoji document_id=5974526806995242353>🆔</emoji> <b>Номер кошелька:</b> <code>{id}</code>\n"
|
||||
"<emoji document_id=5850654130497916523>✅️</emoji> <b>Статус кошелька:</b> {status}\n"
|
||||
"<emoji document_id=5357315181649076022>📂</emoji> <b>Тип кошелька:</b> <code>{type}</code>\n"
|
||||
"<emoji document_id=5328236964564967681>🤑</emoji> <b>Баланс:</b> <code>{balance}₽</code>"
|
||||
),
|
||||
"payme": "<b>📄 {}\n<a href='{}'>Оплатить {} RUB 💳</a></b>",
|
||||
"args": "<b>🚫 Неверные аргументы</b>"
|
||||
}
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"YooMoneyToken",
|
||||
None,
|
||||
lambda: self.strings["_cfg_token"],
|
||||
validator=loader.validators.Hidden(),
|
||||
)
|
||||
)
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self.yoom = {
|
||||
"id": "C801B504CF3753A05164548B116221C72FDE40D4D4A9297821A4F2FA3D7B5612",
|
||||
"secret": "9DE4A15EAE2C063A2DFA4196371EB9655923503B728FFA9A76909B90B4815CB13A0976CB8C79E9235B48C165E026423B2C598EB31CB2AB263B218F50AEA471CE"
|
||||
}
|
||||
self.yclient = None
|
||||
|
||||
if self.config['YooMoneyToken']:
|
||||
try:
|
||||
self.yclient = yoomoney.Client(self.config['YooMoneyToken'])
|
||||
except yoomoney.exceptions.InvalidToken:
|
||||
pass
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="<сумма> <назначение> ; <комментарий> 👉 Отправить ссылку для перевода\n" \
|
||||
"E.g: .ypay 100 На кофе ; Бро, купи мне кофе, вот ссылка для перевода"
|
||||
)
|
||||
async def ypaycmd(self, message: Message):
|
||||
"""<sum> <title> ; <comment> 👉 Send payment link
|
||||
E.g: .ypay 100 For a coffee ; Bro, buy me a coffee, here is the link
|
||||
"""
|
||||
args = utils.get_args_raw(message)
|
||||
try:
|
||||
amount, titlecomm = args.split(maxsplit=1)
|
||||
amount = int(amount)
|
||||
title, comment = titlecomm.split(";", 1)
|
||||
if amount < 2:
|
||||
await utils.answer(message, self.strings("args"))
|
||||
return
|
||||
except Exception:
|
||||
await utils.answer(message, self.strings("args"))
|
||||
return
|
||||
|
||||
quickpay = yoomoney.Quickpay(
|
||||
receiver=self.yclient.account_info().account,
|
||||
quickpay_form="shop",
|
||||
targets=title.strip(),
|
||||
paymentType="SB",
|
||||
sum=amount,
|
||||
label="Money transfer to an individual",
|
||||
)
|
||||
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings("payme").format(
|
||||
utils.escape_html(comment.strip()),
|
||||
quickpay.redirected_url,
|
||||
amount,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="👉 Узнать информацию вашего кошелька",
|
||||
alias="yw"
|
||||
)
|
||||
async def ywalletcmd(self, message: Message):
|
||||
"""👉 Get YooMoney wallet info"""
|
||||
if not self.config['YooMoneyToken']:
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings["need_auth"]
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
self.yclient = yoomoney.Client(self.config['YooMoneyToken'])
|
||||
user = self.yclient.account_info()
|
||||
except yoomoney.exceptions.InvalidToken:
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings['need_auth']
|
||||
)
|
||||
return
|
||||
|
||||
status = self.strings['statuses'][user.account_status]
|
||||
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings['out'].format(id=user.account, status=status, type=user.account_type, balance=round(user.balance, 2))
|
||||
)
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="👉 Первый этап авторизации"
|
||||
)
|
||||
async def yauthcmd(self, message: Message):
|
||||
"""👉 First stage of auth"""
|
||||
scopes = [
|
||||
"account-info", "operation-history"#, "operation-details",
|
||||
#"incoming-transfers", "payment-p2p", "payment-shop"
|
||||
]
|
||||
|
||||
a = (await utils.run_sync(
|
||||
requests.post,
|
||||
f"https://yoomoney.ru/oauth/authorize?client_id={self.yoom['id']}&response_type=code" \
|
||||
f"&redirect_uri=https://yoomoney.whypodg.me&scope={' '.join(scopes)}",
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
)).url
|
||||
|
||||
await self.inline.form(
|
||||
text=self.strings['auth'],
|
||||
message=message,
|
||||
reply_markup=[{
|
||||
"text": self.strings['follow_me'],
|
||||
"url": a
|
||||
}]
|
||||
)
|
||||
|
||||
|
||||
@loader.command(
|
||||
ru_doc="👉 Второй этап авторизации"
|
||||
)
|
||||
async def ycodecmd(self, message: Message):
|
||||
"""👉 Second stage of auth"""
|
||||
args = utils.get_args_raw(message)
|
||||
code = list(args.partition("code="))
|
||||
code = str(args) if not code[2] else code[2]
|
||||
|
||||
req = (await utils.run_sync(
|
||||
requests.post,
|
||||
f"https://yoomoney.ru/oauth/token?code={code}&client_id={self.yoom['id']}&client_secret={self.yoom['secret']}" \
|
||||
f"&grant_type=authorization_code&redirect_uri=https://yoomoney.whypodg.me",
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
)).json()
|
||||
|
||||
if not req.get("access_token"):
|
||||
err = json.dumps(req, indent=4, ensure_ascii=False)
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings['yoomoney_error'].format(err)
|
||||
)
|
||||
return
|
||||
|
||||
self.config['YooMoneyToken'] = req['access_token']
|
||||
await utils.answer(
|
||||
message,
|
||||
self.strings['successful_auth']
|
||||
)
|
||||
|
||||
try:
|
||||
self.yclient = yoomoney.Client(self.config['YooMoneyToken'])
|
||||
except yoomoney.exceptions.InvalidToken:
|
||||
pass
|
||||
Reference in New Issue
Block a user