frozen_subs/restore_all_trial and more

This commit is contained in:
Vladless
2025-03-12 18:12:29 +03:00
parent e57680f3a7
commit af497f644a
29 changed files with 3854 additions and 3163 deletions
+3
View File
@@ -42,6 +42,9 @@ CREATE TABLE IF NOT EXISTS keys
PRIMARY KEY (tg_id, client_id)
);
ALTER TABLE keys
ADD COLUMN is_frozen BOOLEAN DEFAULT FALSE;
CREATE TABLE IF NOT EXISTS referrals
(
referred_tg_id BIGINT PRIMARY KEY NOT NULL,
-8
View File
@@ -3,7 +3,6 @@ import subprocess
from datetime import datetime, timedelta
from pathlib import Path
from typing import Optional, Tuple, Union
import aiofiles
@@ -50,17 +49,14 @@ def _create_database_backup() -> tuple[str | None, Exception | None]:
"""
date_formatted = datetime.now().strftime("%Y-%m-%d-%H%M%S")
# Создаем директорию для бэкапов, если она не существует
backup_dir = Path(BACK_DIR)
backup_dir.mkdir(parents=True, exist_ok=True)
filename = backup_dir / f"{DB_NAME}-backup-{date_formatted}.sql"
try:
# Устанавливаем пароль PostgreSQL через переменную окружения
os.environ["PGPASSWORD"] = DB_PASSWORD
# Запускаем pg_dump для создания бэкапа
subprocess.run(
[
"pg_dump",
@@ -89,7 +85,6 @@ def _create_database_backup() -> tuple[str | None, Exception | None]:
logger.error(f"Непредвиденная ошибка при создании бэкапа: {e}")
return None, e
finally:
# Удаляем переменную окружения с паролем
if "PGPASSWORD" in os.environ:
del os.environ["PGPASSWORD"]
@@ -106,10 +101,8 @@ def _cleanup_old_backups() -> Exception | None:
if not backup_dir.exists():
return None
# Вычисляем дату, старше которой нужно удалить файлы
cutoff_date = datetime.now() - timedelta(days=3)
# Находим и удаляем старые файлы бэкапов
for backup_file in backup_dir.glob("*.sql"):
if backup_file.is_file():
file_mtime = datetime.fromtimestamp(backup_file.stat().st_mtime)
@@ -154,7 +147,6 @@ async def _send_backup_to_admins(backup_file_path: str) -> None:
filename = os.path.basename(backup_file_path)
backup_input_file = BufferedInputFile(file=backup_data, filename=filename)
# Отправляем файл каждому администратору
for admin_id in ADMIN_ID:
try:
await bot.send_document(chat_id=admin_id, document=backup_input_file)
+1 -1
View File
@@ -19,7 +19,7 @@ bot = Bot(token=API_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTM
storage = MemoryStorage()
dp = Dispatcher(bot=bot, storage=storage)
version = "4.0"
version = "4.1-beta(12)"
register_middleware(dp)
+4 -6
View File
@@ -72,7 +72,7 @@ async def add_client(xui: py3xui.AsyncApi, config: ClientConfig) -> dict[str, An
async def extend_client_key(
xui: py3xui.AsyncApi, inbound_id: int, email: str, new_expiry_time: int, client_id: str, total_gb: int, sub_id: str
xui: py3xui.AsyncApi, inbound_id: int, email: str, new_expiry_time: int, client_id: str, total_gb: int, sub_id: str, tg_id: int
) -> bool | None:
"""
Обновляет срок действия ключа клиента.
@@ -94,11 +94,11 @@ async def extend_client_key(
client = await xui.client.get_by_email(email)
if not client:
logger.warning(f"Клиент с email {email} не найден")
logger.warning(f"Клиент с email {email} не найден.")
return None
if not client.id:
logger.warning(f"Ошибка: клиент {email} не имеет действительного ID")
logger.warning(f"Ошибка: клиент {email} не имеет действительного ID.")
return None
logger.info(f"Обновление ключа клиента {email} с ID {client.id} до {new_expiry_time}")
@@ -111,6 +111,7 @@ async def extend_client_key(
client.enable = True
client.limit_ip = LIMIT_IP
client.inbound_id = inbound_id
client.tg_id = tg_id
await xui.client.update(client.id, client)
await xui.client.reset_stats(inbound_id, email)
@@ -219,21 +220,18 @@ async def toggle_client(xui: py3xui.AsyncApi, inbound_id: int, email: str, clien
try:
await xui.login()
# Получаем клиента по email
client = await xui.client.get_by_email(email)
if not client:
logger.warning(f"Клиент с email {email} и ID {client_id} не найден.")
return False
# Обновляем параметры клиента
client.enable = enable
client.id = client_id
client.flow = "xtls-rprx-vision"
client.limit_ip = LIMIT_IP
client.inbound_id = inbound_id
# Обновляем клиента
await xui.client.update(client.id, client)
status = "включен" if enable else "отключен"
logger.info(f"Клиент с email {email} и ID {client_id} успешно {status}.")
+2 -1
View File
@@ -1423,7 +1423,7 @@ async def store_gift_link(
async def get_key_details(email, session):
record = await session.fetchrow(
"""
SELECT k.server_id, k.key, k.email, k.expiry_time, k.client_id, k.created_at, c.tg_id, c.balance
SELECT k.server_id, k.key, k.email, k.is_frozen, k.expiry_time, k.client_id, k.created_at, c.tg_id, c.balance
FROM keys k
JOIN connections c ON k.tg_id = c.tg_id
WHERE k.email = $1
@@ -1461,6 +1461,7 @@ async def get_key_details(email, session):
"balance": record["balance"],
"tg_id": record["tg_id"],
"email": record["email"],
"is_frozen": record["is_frozen"],
}
+1 -1
View File
@@ -1,6 +1,6 @@
from typing import Any
from aiogram import F, Router, types
from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
+43 -1
View File
@@ -10,6 +10,7 @@ from aiogram.exceptions import TelegramBadRequest
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from config import TOTAL_GB
from database import (
@@ -25,7 +26,7 @@ from database import (
from filters.admin import IsAdminFilter
from handlers.keys.key_utils import delete_key_from_cluster, get_user_traffic, renew_key_in_cluster, update_subscription
from handlers.utils import sanitize_key_name
from keyboards.admin.panel_kb import AdminPanelCallback, build_admin_back_kb
from keyboards.admin.panel_kb import AdminPanelCallback, build_admin_back_kb, build_admin_back_btn
from keyboards.admin.users_kb import (
AdminUserEditorCallback,
AdminUserKeyEditorCallback,
@@ -718,3 +719,44 @@ async def handle_user_traffic(
result_text += f"\n🔢 <b>Общий трафик:</b> {total_traffic:.2f} ГБ"
await callback_query.message.edit_text(result_text, reply_markup=build_editor_kb(tg_id, True))
@router.callback_query(AdminPanelCallback.filter(F.action == "restore_trials"), IsAdminFilter())
async def confirm_restore_trials(callback_query: types.CallbackQuery):
"""
Меню подтверждения перед восстановлением пробников.
"""
builder = InlineKeyboardBuilder()
builder.button(text="✅ Подтвердить", callback_data=AdminPanelCallback(action="confirm_restore_trials").pack())
builder.row(build_admin_back_btn())
await callback_query.message.edit_text(
text="⚠ Вы уверены, что хотите восстановить пробники для пользователей? \n\n"
"Только для тех, у кого нет активной подписки!",
reply_markup=builder.as_markup()
)
@router.callback_query(AdminPanelCallback.filter(F.action == "confirm_restore_trials"), IsAdminFilter())
async def restore_trials(callback_query: types.CallbackQuery, session: Any):
"""
Восстанавливает пробники для пользователей, у которых нет активной подписки.
"""
query = """
UPDATE connections
SET trial = 0
WHERE tg_id IN (
SELECT DISTINCT c.tg_id
FROM connections c
LEFT JOIN keys k ON c.tg_id = k.tg_id
WHERE k.tg_id IS NULL AND c.trial != 0
)
"""
await session.execute(query)
builder = InlineKeyboardBuilder()
builder.row(build_admin_back_btn())
await callback_query.message.edit_text(
text="✅ Пробники успешно восстановлены для пользователей, у которых нет активных подписок.",
reply_markup=builder.as_markup()
)
+15 -2
View File
@@ -2,8 +2,9 @@ import asyncio
from typing import Any
from config import ADMIN_PASSWORD, ADMIN_USERNAME, LIMIT_IP, PUBLIC_LINK, SUPERNODE, TOTAL_GB, USE_COUNTRY_SELECTION
from config import ADMIN_PASSWORD, ADMIN_USERNAME, LIMIT_IP, PUBLIC_LINK, SUPERNODE, TOTAL_GB, DATABASE_URL
from py3xui import AsyncApi
import asyncpg
from client import ClientConfig, add_client, delete_client, extend_client_key, get_client_traffic, toggle_client
from database import get_servers, store_key
@@ -125,6 +126,16 @@ async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, to
else:
raise ValueError(f"Кластер или сервер с ID/именем {cluster_id} не найден.")
async with asyncpg.create_pool(DATABASE_URL) as pool:
async with pool.acquire() as conn:
tg_id_query = "SELECT tg_id FROM keys WHERE client_id = $1 LIMIT 1"
tg_id_record = await conn.fetchrow(tg_id_query, client_id)
if not tg_id_record:
logger.error(f"Не найден пользователь с client_id={client_id} в таблице keys.")
return False
tg_id = tg_id_record["tg_id"]
tasks = []
for server_info in cluster:
xui = AsyncApi(
@@ -149,7 +160,9 @@ async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, to
sub_id = unique_email
tasks.append(
extend_client_key(xui, int(inbound_id), unique_email, new_expiry_time, client_id, total_gb, sub_id)
extend_client_key(
xui, int(inbound_id), unique_email, new_expiry_time, client_id, total_gb, sub_id, tg_id
)
)
await asyncio.gather(*tasks, return_exceptions=True)
+210
View File
@@ -25,6 +25,7 @@ from config import (
TOTAL_GB,
USE_COUNTRY_SELECTION,
USE_NEW_PAYMENT_FLOW,
TOGGLE_CLIENT
)
from bot import bot
@@ -52,6 +53,7 @@ from handlers.keys.key_utils import (
delete_key_from_cluster,
renew_key_in_cluster,
update_subscription,
toggle_client_on_cluster
)
from handlers.payments.robokassa_pay import handle_custom_amount_input
from handlers.payments.yookassa_pay import process_custom_amount_input
@@ -143,6 +145,7 @@ async def process_callback_view_key(callback_query: CallbackQuery, session: Any)
key = record["key"]
expiry_time = record["expiry_time"]
server_name = record["server_id"]
is_frozen = record["is_frozen"]
country = server_name
expiry_date = datetime.utcfromtimestamp(expiry_time / 1000)
current_date = datetime.utcnow()
@@ -203,6 +206,22 @@ async def process_callback_view_key(callback_query: CallbackQuery, session: Any)
builder.row(
InlineKeyboardButton(text="🌍 Сменить локацию", callback_data=f"change_location|{key_name}")
)
if TOGGLE_CLIENT:
if is_frozen:
builder.row(
InlineKeyboardButton(
text="🟢 Разморозить подписку",
callback_data=f"unfreeze_subscription|{key_name}",
)
)
else:
builder.row(
InlineKeyboardButton(
text="🛑 Заморозить подписку",
callback_data=f"freeze_subscription|{key_name}",
)
)
builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="view_keys"))
builder.row(InlineKeyboardButton(text="👤 Личный кабинет", callback_data="profile"))
@@ -230,6 +249,197 @@ async def process_callback_view_key(callback_query: CallbackQuery, session: Any)
)
@router.callback_query(F.data.startswith("unfreeze_subscription|"))
async def process_callback_unfreeze_subscription(callback_query: CallbackQuery, session: Any):
key_name = callback_query.data.split("|")[1]
confirm_text = (
"Хотите включить (разморозить) подписку?\n\n"
"После включения доступа трафик и время снова начнут расходоваться."
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(
text="✅ Подтвердить",
callback_data=f"unfreeze_subscription_confirm|{key_name}",
),
InlineKeyboardButton(
text="❌ Отмена",
callback_data=f"view_key|{key_name}",
),
)
await edit_or_send_message(
target_message=callback_query.message,
text=confirm_text,
reply_markup=builder.as_markup(),
)
@router.callback_query(F.data.startswith("unfreeze_subscription_confirm|"))
async def process_callback_unfreeze_subscription_confirm(callback_query: CallbackQuery, session: Any):
"""
Размораживает (включает) подписку без SQLAlchemy.
Параметр 'session' предполагается, что это asyncpg.Connection или аналог.
"""
tg_id = callback_query.message.chat.id
key_name = callback_query.data.split("|")[1]
try:
record = await get_key_details(key_name, session)
if not record:
await callback_query.message.answer("Ключ не найден.")
return
email = record["email"]
client_id = record["client_id"]
cluster_id = record["server_id"]
result = await toggle_client_on_cluster(cluster_id, email, client_id, enable=True)
if result["status"] == "success":
update_result = await session.execute(
"""
UPDATE keys
SET is_frozen = FALSE
WHERE tg_id = $1
AND client_id = $2
""",
record["tg_id"],
client_id
)
text_ok = (
"✅ Подписка успешно включена.\n\n"
"Теперь трафик и время подписки будут расходоваться."
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(text="⬅️ Назад", callback_data=f"view_key|{key_name}")
)
await edit_or_send_message(
target_message=callback_query.message,
text=text_ok,
reply_markup=builder.as_markup(),
)
else:
text_error = (
"Произошла ошибка при включении подписки.\n"
f"Детали: {result.get('error') or result.get('results')}"
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(text="⬅️ Назад", callback_data=f"view_key|{key_name}")
)
await edit_or_send_message(
target_message=callback_query.message,
text=text_error,
reply_markup=builder.as_markup(),
)
except Exception as e:
await handle_error(tg_id, callback_query, f"Ошибка при включении подписки: {e}")
@router.callback_query(F.data.startswith("freeze_subscription|"))
async def process_callback_freeze_subscription(callback_query: CallbackQuery, session: Any):
"""
Показывает пользователю диалог подтверждения заморозки (отключения) подписки.
session здесь всё равно прокидывается, но в этой функции он не нужен,
т.к. мы пока ничего не читаем/не пишем в БД, а только задаём вопрос пользователю.
"""
tg_id = callback_query.message.chat.id
key_name = callback_query.data.split("|")[1]
confirm_text = (
"Вы можете заморозить (отключить) свою подписку на любой удобный срок, если временно не будете "
"пользоваться VPN. Включить обратно можно будет в этом же меню.\n\n"
"<b>Вы уверены, что хотите заморозить подписку?</b>"
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(
text="✅ Подтвердить",
callback_data=f"freeze_subscription_confirm|{key_name}",
),
InlineKeyboardButton(
text="❌ Отмена",
callback_data=f"view_key|{key_name}",
),
)
await edit_or_send_message(
target_message=callback_query.message,
text=confirm_text,
reply_markup=builder.as_markup(),
)
@router.callback_query(F.data.startswith("freeze_subscription_confirm|"))
async def process_callback_freeze_subscription_confirm(callback_query: CallbackQuery, session: Any):
"""
Замораживает (отключает) подписку.
"""
tg_id = callback_query.message.chat.id
key_name = callback_query.data.split("|")[1]
try:
record = await get_key_details(key_name, session)
if not record:
await callback_query.message.answer("Ключ не найден.")
return
email = record["email"]
client_id = record["client_id"]
cluster_id = record["server_id"]
result = await toggle_client_on_cluster(cluster_id, email, client_id, enable=False)
if result["status"] == "success":
update_result = await session.execute(
"""
UPDATE keys
SET is_frozen = TRUE
WHERE tg_id = $1
AND client_id = $2
""",
record["tg_id"],
client_id
)
text_ok = (
"✅ Подписка успешно заморожена.\n\n"
"Чтобы включить обратно, зайдите в меню ключа и нажмите «Включить подписку»."
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(text="⬅️ Назад", callback_data=f"view_key|{key_name}")
)
await edit_or_send_message(
target_message=callback_query.message,
text=text_ok,
reply_markup=builder.as_markup(),
)
else:
text_error = (
"Произошла ошибка при заморозке подписки.\n"
f"Детали: {result.get('error') or result.get('results')}"
)
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(text="⬅️ Назад", callback_data=f"view_key|{key_name}")
)
await edit_or_send_message(
target_message=callback_query.message,
text=text_error,
reply_markup=builder.as_markup(),
)
except Exception as e:
await handle_error(tg_id, callback_query, f"Ошибка при заморозке подписки: {e}")
@router.callback_query(F.data.startswith("connect_phone|"))
async def process_callback_connect_phone(callback_query: CallbackQuery):
email = callback_query.data.split("|")[1]
@@ -17,6 +17,7 @@ from config import (
RENEWAL_PRICES,
TOTAL_GB,
TRIAL_TIME_DISABLE,
NOTIFY_INACTIVE_TRAFFIC
)
from database import (
@@ -79,8 +80,9 @@ async def periodic_notifications(bot: Bot):
await asyncio.sleep(1)
await handle_expired_keys(bot, conn, current_time, keys)
await asyncio.sleep(0.5)
await notify_users_no_traffic(bot, conn, current_time, keys)
await asyncio.sleep(0.5)
if NOTIFY_INACTIVE_TRAFFIC:
await notify_users_no_traffic(bot, conn, current_time, keys)
await asyncio.sleep(0.5)
except Exception as e:
logger.error(f"❌ Ошибка в periodic_notifications: {e}")
-4
View File
@@ -1,7 +1,5 @@
import os
from typing import Optional
import aiofiles
from aiogram import Bot
@@ -33,7 +31,6 @@ async def send_notification(
"""
photo_path = os.path.join("img", image_filename)
# Проверяем существование файла изображения
if os.path.isfile(photo_path):
return await _send_photo_notification(bot, tg_id, photo_path, image_filename, caption, keyboard)
else:
@@ -61,7 +58,6 @@ async def _send_photo_notification(
return False
except Exception as e:
logger.error(f"Ошибка отправки фото для пользователя {tg_id}: {e}")
# Пробуем отправить текстовое сообщение как запасной вариант
return await _send_text_notification(bot, tg_id, caption, keyboard)
+2 -2
View File
@@ -23,14 +23,14 @@ async def handle_pay(callback_query: CallbackQuery):
if YOOKASSA_ENABLE:
builder.row(
InlineKeyboardButton(
text="💳 ЮКасса: быстрый перевод",
text="💳 ЮКасса: быстрая оплата",
callback_data="pay_yookassa",
)
)
if YOOMONEY_ENABLE:
builder.row(
InlineKeyboardButton(
text="💳 ЮМани: оплата по карте",
text="💳 ЮМани: перевод по карте",
callback_data="pay_yoomoney",
)
)
File diff suppressed because it is too large Load Diff
+234 -221
View File
@@ -2645,30 +2645,29 @@ static const char __pyx_k__5[] = "\320\235\320\260\321\200\321\203\321\210\320\2
static const char __pyx_k__6[] = "\360\237\244\226 \320\221\320\276\321\202 \320\264\320\273\321\217 \320\277\320\276\320\272\321\203\320\277\320\272\320\270 \320\267\320\262\320\265\320\267\320\264";
static const char __pyx_k__7[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203";
static const char __pyx_k__8[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__9[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:";
static const char __pyx_k__9[] = "\320\235\320\265 \321\203\320\264\320\260\320\273\320\276\321\201\321\214 \320\276\321\202\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\321\202\321\214 \321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265, \320\277\321\200\320\276\320\261\321\203\320\265\320\274 \321\203\320\264\320\260\320\273\320\270\321\202\321\214 \320\270 \320\276\321\202\320\277\321\200\320\260\320\262\320\270\321\202\321\214 \320\275\320\276\320\262\320\276\320\265: ";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_id[] = "id";
static const char __pyx_k_ok[] = "ok";
static const char __pyx_k_Any[] = "Any";
static const char __pyx_k_XTR[] = "XTR";
static const char __pyx_k__10[] = "\320\235\320\265 \321\203\320\264\320\260\320\273\320\276\321\201\321\214 \320\276\321\202\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\321\202\321\214 \321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265, \320\277\321\200\320\276\320\261\321\203\320\265\320\274 \321\203\320\264\320\260\320\273\320\270\321\202\321\214 \320\270 \320\276\321\202\320\277\321\200\320\260\320\262\320\270\321\202\321\214 \320\275\320\276\320\262\320\276\320\265: ";
static const char __pyx_k__13[] = "|";
static const char __pyx_k__15[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265 \320\264\320\273\321\217 \320\262\321\213\320\261\320\276\321\200\320\260 \321\201\321\203\320\274\320\274\321\213.";
static const char __pyx_k__16[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260.";
static const char __pyx_k__17[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214";
static const char __pyx_k__18[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 ";
static const char __pyx_k__19[] = " \321\200\321\203\320\261\320\273\320\265\320\271.";
static const char __pyx_k__20[] = "";
static const char __pyx_k__21[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: ";
static const char __pyx_k__22[] = "\320\237\321\200\320\276\320\270\320\267\320\276\321\210\320\273\320\260 \320\276\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260.";
static const char __pyx_k__24[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__25[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.";
static const char __pyx_k__27[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 ";
static const char __pyx_k__28[] = ". \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__29[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__32[] = "_";
static const char __pyx_k__33[] = ".";
static const char __pyx_k__43[] = "?";
static const char __pyx_k__11[] = "|";
static const char __pyx_k__13[] = "\320\235\320\265\320\262\320\265\321\200\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265 \320\264\320\273\321\217 \320\262\321\213\320\261\320\276\321\200\320\260 \321\201\321\203\320\274\320\274\321\213.";
static const char __pyx_k__14[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260.";
static const char __pyx_k__15[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214";
static const char __pyx_k__16[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 ";
static const char __pyx_k__17[] = " \321\200\321\203\320\261\320\273\320\265\320\271.";
static const char __pyx_k__18[] = "";
static const char __pyx_k__19[] = "\320\236\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260: ";
static const char __pyx_k__20[] = "\320\237\321\200\320\276\320\270\320\267\320\276\321\210\320\273\320\260 \320\276\321\210\320\270\320\261\320\272\320\260 \320\277\321\200\320\270 \321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\270 \320\277\320\273\320\260\321\202\320\265\320\266\320\260.";
static const char __pyx_k__22[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__23[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.";
static const char __pyx_k__25[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 ";
static const char __pyx_k__26[] = ". \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__27[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__30[] = "_";
static const char __pyx_k__31[] = ".";
static const char __pyx_k__41[] = "?";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_pay[] = "pay";
static const char __pyx_k_row[] = "row";
@@ -2740,6 +2739,7 @@ static const char __pyx_k_RUB_TO_XTR[] = "RUB_TO_XTR";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_amount_str[] = "amount_str";
static const char __pyx_k_startswith[] = "startswith";
static const char __pyx_k_AMOUNT_TEXT[] = "AMOUNT_TEXT";
static const char __pyx_k_StatesGroup[] = "StatesGroup";
static const char __pyx_k_add_payment[] = "add_payment";
static const char __pyx_k_description[] = "description";
@@ -2866,6 +2866,7 @@ typedef struct {
PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_6_on_pre_checkout_query;
PyTypeObject *__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment;
PyObject *__pyx_kp_u_21U68SOLOBOT;
PyObject *__pyx_n_s_AMOUNT_TEXT;
PyObject *__pyx_n_s_Any;
PyObject *__pyx_n_s_F;
PyObject *__pyx_n_s_FSMContext;
@@ -2883,25 +2884,24 @@ typedef struct {
PyObject *__pyx_n_s_StatesGroup;
PyObject *__pyx_n_s_ValueError;
PyObject *__pyx_n_u_XTR;
PyObject *__pyx_kp_u__10;
PyObject *__pyx_kp_u__11;
PyObject *__pyx_kp_u__13;
PyObject *__pyx_kp_u__15;
PyObject *__pyx_kp_u__14;
PyObject *__pyx_n_u__15;
PyObject *__pyx_kp_u__16;
PyObject *__pyx_n_u__17;
PyObject *__pyx_kp_u__17;
PyObject *__pyx_kp_u__18;
PyObject *__pyx_kp_u__19;
PyObject *__pyx_kp_u__2;
PyObject *__pyx_kp_u__20;
PyObject *__pyx_kp_u__21;
PyObject *__pyx_kp_u__22;
PyObject *__pyx_kp_u__24;
PyObject *__pyx_kp_u__23;
PyObject *__pyx_kp_u__25;
PyObject *__pyx_kp_u__26;
PyObject *__pyx_kp_u__27;
PyObject *__pyx_kp_u__28;
PyObject *__pyx_kp_u__29;
PyObject *__pyx_n_u__32;
PyObject *__pyx_kp_u__33;
PyObject *__pyx_n_s__43;
PyObject *__pyx_n_u__30;
PyObject *__pyx_kp_u__31;
PyObject *__pyx_n_s__41;
PyObject *__pyx_kp_u__5;
PyObject *__pyx_kp_u__6;
PyObject *__pyx_kp_u__7;
@@ -3041,8 +3041,9 @@ typedef struct {
PyObject *__pyx_int_1;
PyObject *__pyx_int_2;
PyObject *__pyx_codeobj_;
PyObject *__pyx_tuple__11;
PyObject *__pyx_tuple__14;
PyObject *__pyx_tuple__12;
PyObject *__pyx_tuple__32;
PyObject *__pyx_tuple__33;
PyObject *__pyx_tuple__34;
PyObject *__pyx_tuple__35;
PyObject *__pyx_tuple__36;
@@ -3050,15 +3051,13 @@ typedef struct {
PyObject *__pyx_tuple__38;
PyObject *__pyx_tuple__39;
PyObject *__pyx_tuple__40;
PyObject *__pyx_tuple__41;
PyObject *__pyx_tuple__42;
PyObject *__pyx_codeobj__3;
PyObject *__pyx_codeobj__4;
PyObject *__pyx_codeobj__12;
PyObject *__pyx_codeobj__23;
PyObject *__pyx_codeobj__26;
PyObject *__pyx_codeobj__30;
PyObject *__pyx_codeobj__31;
PyObject *__pyx_codeobj__10;
PyObject *__pyx_codeobj__21;
PyObject *__pyx_codeobj__24;
PyObject *__pyx_codeobj__28;
PyObject *__pyx_codeobj__29;
} __pyx_mstate;
#if CYTHON_USE_MODULE_STATE
@@ -3118,6 +3117,7 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment);
Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment);
Py_CLEAR(clear_module_state->__pyx_kp_u_21U68SOLOBOT);
Py_CLEAR(clear_module_state->__pyx_n_s_AMOUNT_TEXT);
Py_CLEAR(clear_module_state->__pyx_n_s_Any);
Py_CLEAR(clear_module_state->__pyx_n_s_F);
Py_CLEAR(clear_module_state->__pyx_n_s_FSMContext);
@@ -3135,25 +3135,24 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_n_s_StatesGroup);
Py_CLEAR(clear_module_state->__pyx_n_s_ValueError);
Py_CLEAR(clear_module_state->__pyx_n_u_XTR);
Py_CLEAR(clear_module_state->__pyx_kp_u__10);
Py_CLEAR(clear_module_state->__pyx_kp_u__11);
Py_CLEAR(clear_module_state->__pyx_kp_u__13);
Py_CLEAR(clear_module_state->__pyx_kp_u__15);
Py_CLEAR(clear_module_state->__pyx_kp_u__14);
Py_CLEAR(clear_module_state->__pyx_n_u__15);
Py_CLEAR(clear_module_state->__pyx_kp_u__16);
Py_CLEAR(clear_module_state->__pyx_n_u__17);
Py_CLEAR(clear_module_state->__pyx_kp_u__17);
Py_CLEAR(clear_module_state->__pyx_kp_u__18);
Py_CLEAR(clear_module_state->__pyx_kp_u__19);
Py_CLEAR(clear_module_state->__pyx_kp_u__2);
Py_CLEAR(clear_module_state->__pyx_kp_u__20);
Py_CLEAR(clear_module_state->__pyx_kp_u__21);
Py_CLEAR(clear_module_state->__pyx_kp_u__22);
Py_CLEAR(clear_module_state->__pyx_kp_u__24);
Py_CLEAR(clear_module_state->__pyx_kp_u__23);
Py_CLEAR(clear_module_state->__pyx_kp_u__25);
Py_CLEAR(clear_module_state->__pyx_kp_u__26);
Py_CLEAR(clear_module_state->__pyx_kp_u__27);
Py_CLEAR(clear_module_state->__pyx_kp_u__28);
Py_CLEAR(clear_module_state->__pyx_kp_u__29);
Py_CLEAR(clear_module_state->__pyx_n_u__32);
Py_CLEAR(clear_module_state->__pyx_kp_u__33);
Py_CLEAR(clear_module_state->__pyx_n_s__43);
Py_CLEAR(clear_module_state->__pyx_n_u__30);
Py_CLEAR(clear_module_state->__pyx_kp_u__31);
Py_CLEAR(clear_module_state->__pyx_n_s__41);
Py_CLEAR(clear_module_state->__pyx_kp_u__5);
Py_CLEAR(clear_module_state->__pyx_kp_u__6);
Py_CLEAR(clear_module_state->__pyx_kp_u__7);
@@ -3293,8 +3292,9 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_int_1);
Py_CLEAR(clear_module_state->__pyx_int_2);
Py_CLEAR(clear_module_state->__pyx_codeobj_);
Py_CLEAR(clear_module_state->__pyx_tuple__11);
Py_CLEAR(clear_module_state->__pyx_tuple__14);
Py_CLEAR(clear_module_state->__pyx_tuple__12);
Py_CLEAR(clear_module_state->__pyx_tuple__32);
Py_CLEAR(clear_module_state->__pyx_tuple__33);
Py_CLEAR(clear_module_state->__pyx_tuple__34);
Py_CLEAR(clear_module_state->__pyx_tuple__35);
Py_CLEAR(clear_module_state->__pyx_tuple__36);
@@ -3302,15 +3302,13 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_tuple__38);
Py_CLEAR(clear_module_state->__pyx_tuple__39);
Py_CLEAR(clear_module_state->__pyx_tuple__40);
Py_CLEAR(clear_module_state->__pyx_tuple__41);
Py_CLEAR(clear_module_state->__pyx_tuple__42);
Py_CLEAR(clear_module_state->__pyx_codeobj__3);
Py_CLEAR(clear_module_state->__pyx_codeobj__4);
Py_CLEAR(clear_module_state->__pyx_codeobj__12);
Py_CLEAR(clear_module_state->__pyx_codeobj__23);
Py_CLEAR(clear_module_state->__pyx_codeobj__26);
Py_CLEAR(clear_module_state->__pyx_codeobj__30);
Py_CLEAR(clear_module_state->__pyx_codeobj__31);
Py_CLEAR(clear_module_state->__pyx_codeobj__10);
Py_CLEAR(clear_module_state->__pyx_codeobj__21);
Py_CLEAR(clear_module_state->__pyx_codeobj__24);
Py_CLEAR(clear_module_state->__pyx_codeobj__28);
Py_CLEAR(clear_module_state->__pyx_codeobj__29);
return 0;
}
#endif
@@ -3348,6 +3346,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment);
Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment);
Py_VISIT(traverse_module_state->__pyx_kp_u_21U68SOLOBOT);
Py_VISIT(traverse_module_state->__pyx_n_s_AMOUNT_TEXT);
Py_VISIT(traverse_module_state->__pyx_n_s_Any);
Py_VISIT(traverse_module_state->__pyx_n_s_F);
Py_VISIT(traverse_module_state->__pyx_n_s_FSMContext);
@@ -3365,25 +3364,24 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_n_s_StatesGroup);
Py_VISIT(traverse_module_state->__pyx_n_s_ValueError);
Py_VISIT(traverse_module_state->__pyx_n_u_XTR);
Py_VISIT(traverse_module_state->__pyx_kp_u__10);
Py_VISIT(traverse_module_state->__pyx_kp_u__11);
Py_VISIT(traverse_module_state->__pyx_kp_u__13);
Py_VISIT(traverse_module_state->__pyx_kp_u__15);
Py_VISIT(traverse_module_state->__pyx_kp_u__14);
Py_VISIT(traverse_module_state->__pyx_n_u__15);
Py_VISIT(traverse_module_state->__pyx_kp_u__16);
Py_VISIT(traverse_module_state->__pyx_n_u__17);
Py_VISIT(traverse_module_state->__pyx_kp_u__17);
Py_VISIT(traverse_module_state->__pyx_kp_u__18);
Py_VISIT(traverse_module_state->__pyx_kp_u__19);
Py_VISIT(traverse_module_state->__pyx_kp_u__2);
Py_VISIT(traverse_module_state->__pyx_kp_u__20);
Py_VISIT(traverse_module_state->__pyx_kp_u__21);
Py_VISIT(traverse_module_state->__pyx_kp_u__22);
Py_VISIT(traverse_module_state->__pyx_kp_u__24);
Py_VISIT(traverse_module_state->__pyx_kp_u__23);
Py_VISIT(traverse_module_state->__pyx_kp_u__25);
Py_VISIT(traverse_module_state->__pyx_kp_u__26);
Py_VISIT(traverse_module_state->__pyx_kp_u__27);
Py_VISIT(traverse_module_state->__pyx_kp_u__28);
Py_VISIT(traverse_module_state->__pyx_kp_u__29);
Py_VISIT(traverse_module_state->__pyx_n_u__32);
Py_VISIT(traverse_module_state->__pyx_kp_u__33);
Py_VISIT(traverse_module_state->__pyx_n_s__43);
Py_VISIT(traverse_module_state->__pyx_n_u__30);
Py_VISIT(traverse_module_state->__pyx_kp_u__31);
Py_VISIT(traverse_module_state->__pyx_n_s__41);
Py_VISIT(traverse_module_state->__pyx_kp_u__5);
Py_VISIT(traverse_module_state->__pyx_kp_u__6);
Py_VISIT(traverse_module_state->__pyx_kp_u__7);
@@ -3523,8 +3521,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_int_1);
Py_VISIT(traverse_module_state->__pyx_int_2);
Py_VISIT(traverse_module_state->__pyx_codeobj_);
Py_VISIT(traverse_module_state->__pyx_tuple__11);
Py_VISIT(traverse_module_state->__pyx_tuple__14);
Py_VISIT(traverse_module_state->__pyx_tuple__12);
Py_VISIT(traverse_module_state->__pyx_tuple__32);
Py_VISIT(traverse_module_state->__pyx_tuple__33);
Py_VISIT(traverse_module_state->__pyx_tuple__34);
Py_VISIT(traverse_module_state->__pyx_tuple__35);
Py_VISIT(traverse_module_state->__pyx_tuple__36);
@@ -3532,15 +3531,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_tuple__38);
Py_VISIT(traverse_module_state->__pyx_tuple__39);
Py_VISIT(traverse_module_state->__pyx_tuple__40);
Py_VISIT(traverse_module_state->__pyx_tuple__41);
Py_VISIT(traverse_module_state->__pyx_tuple__42);
Py_VISIT(traverse_module_state->__pyx_codeobj__3);
Py_VISIT(traverse_module_state->__pyx_codeobj__4);
Py_VISIT(traverse_module_state->__pyx_codeobj__12);
Py_VISIT(traverse_module_state->__pyx_codeobj__23);
Py_VISIT(traverse_module_state->__pyx_codeobj__26);
Py_VISIT(traverse_module_state->__pyx_codeobj__30);
Py_VISIT(traverse_module_state->__pyx_codeobj__31);
Py_VISIT(traverse_module_state->__pyx_codeobj__10);
Py_VISIT(traverse_module_state->__pyx_codeobj__21);
Py_VISIT(traverse_module_state->__pyx_codeobj__24);
Py_VISIT(traverse_module_state->__pyx_codeobj__28);
Py_VISIT(traverse_module_state->__pyx_codeobj__29);
return 0;
}
#endif
@@ -3588,6 +3585,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_6_on_pre_checkout_query __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_6_on_pre_checkout_query
#define __pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment __pyx_mstate_global->__pyx_ptype_8handlers_8payments_9stars_pay___pyx_scope_struct_7_on_successful_payment
#define __pyx_kp_u_21U68SOLOBOT __pyx_mstate_global->__pyx_kp_u_21U68SOLOBOT
#define __pyx_n_s_AMOUNT_TEXT __pyx_mstate_global->__pyx_n_s_AMOUNT_TEXT
#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any
#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F
#define __pyx_n_s_FSMContext __pyx_mstate_global->__pyx_n_s_FSMContext
@@ -3605,25 +3603,24 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_n_s_StatesGroup __pyx_mstate_global->__pyx_n_s_StatesGroup
#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError
#define __pyx_n_u_XTR __pyx_mstate_global->__pyx_n_u_XTR
#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10
#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11
#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13
#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15
#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14
#define __pyx_n_u__15 __pyx_mstate_global->__pyx_n_u__15
#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16
#define __pyx_n_u__17 __pyx_mstate_global->__pyx_n_u__17
#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17
#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18
#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19
#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2
#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20
#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21
#define __pyx_kp_u__22 __pyx_mstate_global->__pyx_kp_u__22
#define __pyx_kp_u__24 __pyx_mstate_global->__pyx_kp_u__24
#define __pyx_kp_u__23 __pyx_mstate_global->__pyx_kp_u__23
#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25
#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26
#define __pyx_kp_u__27 __pyx_mstate_global->__pyx_kp_u__27
#define __pyx_kp_u__28 __pyx_mstate_global->__pyx_kp_u__28
#define __pyx_kp_u__29 __pyx_mstate_global->__pyx_kp_u__29
#define __pyx_n_u__32 __pyx_mstate_global->__pyx_n_u__32
#define __pyx_kp_u__33 __pyx_mstate_global->__pyx_kp_u__33
#define __pyx_n_s__43 __pyx_mstate_global->__pyx_n_s__43
#define __pyx_n_u__30 __pyx_mstate_global->__pyx_n_u__30
#define __pyx_kp_u__31 __pyx_mstate_global->__pyx_kp_u__31
#define __pyx_n_s__41 __pyx_mstate_global->__pyx_n_s__41
#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5
#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6
#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7
@@ -3763,8 +3760,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1
#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2
#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_
#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11
#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14
#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12
#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32
#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33
#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34
#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35
#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36
@@ -3772,15 +3770,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38
#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39
#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40
#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41
#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42
#define __pyx_codeobj__3 __pyx_mstate_global->__pyx_codeobj__3
#define __pyx_codeobj__4 __pyx_mstate_global->__pyx_codeobj__4
#define __pyx_codeobj__12 __pyx_mstate_global->__pyx_codeobj__12
#define __pyx_codeobj__23 __pyx_mstate_global->__pyx_codeobj__23
#define __pyx_codeobj__26 __pyx_mstate_global->__pyx_codeobj__26
#define __pyx_codeobj__30 __pyx_mstate_global->__pyx_codeobj__30
#define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31
#define __pyx_codeobj__10 __pyx_mstate_global->__pyx_codeobj__10
#define __pyx_codeobj__21 __pyx_mstate_global->__pyx_codeobj__21
#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24
#define __pyx_codeobj__28 __pyx_mstate_global->__pyx_codeobj__28
#define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29
/* #### Code section: module_code ### */
static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
@@ -5410,7 +5406,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_Corou
__Pyx_GOTREF(__pyx_t_6);
if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_target_message, __pyx_t_6) < 0) __PYX_ERR(0, 113, __pyx_L15_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_text, __pyx_kp_u__9) < 0) __PYX_ERR(0, 113, __pyx_L15_error)
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_AMOUNT_TEXT); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 114, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_6);
if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_text, __pyx_t_6) < 0) __PYX_ERR(0, 113, __pyx_L15_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_4);
@@ -5513,7 +5513,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_Corou
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 118, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u__10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L27_error)
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u__9, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_11 = NULL;
@@ -5680,41 +5680,51 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_Corou
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AMOUNT_TEXT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 124, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 123, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_GIVEREF(__pyx_t_4);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4)) __PYX_ERR(0, 123, __pyx_L27_error);
__pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = NULL;
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_13 = NULL;
__pyx_t_5 = 0;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
if (likely(__pyx_t_12)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_12);
if (likely(PyMethod_Check(__pyx_t_12))) {
__pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
if (likely(__pyx_t_13)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
__Pyx_INCREF(__pyx_t_13);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_11, function);
__Pyx_DECREF_SET(__pyx_t_12, function);
__pyx_t_5 = 1;
}
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
__pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
__pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_reply_markup, __pyx_t_14) < 0) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_reply_markup, __pyx_t_11) < 0) __PYX_ERR(0, 125, __pyx_L27_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__11, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 123, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_14);
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_14, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 123, __pyx_L27_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_14);
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XGOTREF(__pyx_r);
if (likely(__pyx_r)) {
__Pyx_XGIVEREF(__pyx_t_3);
@@ -5834,8 +5844,8 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_Corou
__Pyx_GOTREF(__pyx_t_7);
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_ReplenishBalanceState); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 129, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_choosing_amount_stars); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 129, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_choosing_amount_stars); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 129, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = NULL;
__pyx_t_5 = 0;
@@ -5852,10 +5862,10 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_8generator2(__pyx_Corou
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_14};
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_11};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 129, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -6044,7 +6054,7 @@ static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_9process_amount_selecti
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_11generator3, __pyx_codeobj__12, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_11generator3, __pyx_codeobj__10, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -6113,7 +6123,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GIVEREF(__pyx_t_1);
@@ -6133,7 +6143,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_target_message, __pyx_t_5) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__15) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__13) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reply_markup, Py_None) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
@@ -6213,7 +6223,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_12);
if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_target_message, __pyx_t_12) < 0) __PYX_ERR(0, 152, __pyx_L8_except_error)
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_kp_u__16) < 0) __PYX_ERR(0, 152, __pyx_L8_except_error)
if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_text, __pyx_kp_u__14) < 0) __PYX_ERR(0, 152, __pyx_L8_except_error)
if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_reply_markup, Py_None) < 0) __PYX_ERR(0, 152, __pyx_L8_except_error)
@@ -6478,7 +6488,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_n_u__17) < 0) __PYX_ERR(0, 166, __pyx_L17_error)
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_text, __pyx_n_u__15) < 0) __PYX_ERR(0, 166, __pyx_L17_error)
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pay, Py_True) < 0) __PYX_ERR(0, 166, __pyx_L17_error)
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 166, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_11);
@@ -6559,11 +6569,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = 0;
__pyx_t_14 = 127;
__Pyx_INCREF(__pyx_kp_u__18);
__Pyx_INCREF(__pyx_kp_u__16);
__pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14;
__pyx_t_3 += 25;
__Pyx_GIVEREF(__pyx_kp_u__18);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__18);
__Pyx_GIVEREF(__pyx_kp_u__16);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__16);
__pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_14;
@@ -6571,11 +6581,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GIVEREF(__pyx_t_1);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
__pyx_t_1 = 0;
__Pyx_INCREF(__pyx_kp_u__19);
__Pyx_INCREF(__pyx_kp_u__17);
__pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14;
__pyx_t_3 += 8;
__Pyx_GIVEREF(__pyx_kp_u__19);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__19);
__Pyx_GIVEREF(__pyx_kp_u__17);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__17);
__pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -6586,11 +6596,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = 0;
__pyx_t_14 = 127;
__Pyx_INCREF(__pyx_kp_u__18);
__Pyx_INCREF(__pyx_kp_u__16);
__pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14;
__pyx_t_3 += 25;
__Pyx_GIVEREF(__pyx_kp_u__18);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__18);
__Pyx_GIVEREF(__pyx_kp_u__16);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__16);
__pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
@@ -6598,11 +6608,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
__pyx_t_2 = 0;
__Pyx_INCREF(__pyx_kp_u__19);
__Pyx_INCREF(__pyx_kp_u__17);
__pyx_t_14 = (65535 > __pyx_t_14) ? 65535 : __pyx_t_14;
__pyx_t_3 += 8;
__Pyx_GIVEREF(__pyx_kp_u__19);
PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__19);
__Pyx_GIVEREF(__pyx_kp_u__17);
PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__17);
__pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6635,7 +6645,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__pyx_t_11 = 0;
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_prices, __pyx_t_1) < 0) __PYX_ERR(0, 173, __pyx_L17_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_provider_token, __pyx_kp_u__20) < 0) __PYX_ERR(0, 173, __pyx_L17_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_provider_token, __pyx_kp_u__18) < 0) __PYX_ERR(0, 173, __pyx_L17_error)
__pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_1);
@@ -6744,7 +6754,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L30_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__21, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 182, __pyx_L30_error)
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__19, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 182, __pyx_L30_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = NULL;
@@ -6781,7 +6791,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_11generator3(__pyx_Coro
__Pyx_GOTREF(__pyx_t_15);
if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_target_message, __pyx_t_15) < 0) __PYX_ERR(0, 184, __pyx_L30_error)
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_kp_u__22) < 0) __PYX_ERR(0, 184, __pyx_L30_error)
if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_text, __pyx_kp_u__20) < 0) __PYX_ERR(0, 184, __pyx_L30_error)
if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_reply_markup, Py_None) < 0) __PYX_ERR(0, 184, __pyx_L30_error)
@@ -7066,7 +7076,7 @@ static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_12process_enter_custom_
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_14generator4, __pyx_codeobj__23, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_14generator4, __pyx_codeobj__21, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 189, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -7142,7 +7152,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_14generator4(__pyx_Coro
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 192, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__24) < 0) __PYX_ERR(0, 192, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__22) < 0) __PYX_ERR(0, 192, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_back_to_pay_stars) < 0) __PYX_ERR(0, 192, __pyx_L1_error)
__pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 192, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
@@ -7182,7 +7192,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_14generator4(__pyx_Coro
__Pyx_GOTREF(__pyx_t_6);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_target_message, __pyx_t_6) < 0) __PYX_ERR(0, 195, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__25) < 0) __PYX_ERR(0, 195, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__23) < 0) __PYX_ERR(0, 195, __pyx_L1_error)
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 197, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
@@ -7445,7 +7455,7 @@ static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_15process_custom_amount
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_17generator5, __pyx_codeobj__26, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_17generator5, __pyx_codeobj__24, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 203, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -7567,11 +7577,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_6 = 0;
__pyx_t_7 = 127;
__Pyx_INCREF(__pyx_kp_u__27);
__Pyx_INCREF(__pyx_kp_u__25);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 25;
__Pyx_GIVEREF(__pyx_kp_u__27);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__27);
__Pyx_GIVEREF(__pyx_kp_u__25);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__25);
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_RUB_TO_XTR); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error)
@@ -7582,11 +7592,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GIVEREF(__pyx_t_9);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_9);
__pyx_t_9 = 0;
__Pyx_INCREF(__pyx_kp_u__28);
__Pyx_INCREF(__pyx_kp_u__26);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 36;
__Pyx_GIVEREF(__pyx_kp_u__28);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__28);
__Pyx_GIVEREF(__pyx_kp_u__26);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__26);
__pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -7820,7 +7830,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__17) < 0) __PYX_ERR(0, 222, __pyx_L9_error)
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__15) < 0) __PYX_ERR(0, 222, __pyx_L9_error)
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pay, Py_True) < 0) __PYX_ERR(0, 222, __pyx_L9_error)
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 222, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_8);
@@ -7898,11 +7908,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_6 = 0;
__pyx_t_7 = 127;
__Pyx_INCREF(__pyx_kp_u__18);
__Pyx_INCREF(__pyx_kp_u__16);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 25;
__Pyx_GIVEREF(__pyx_kp_u__18);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__18);
__Pyx_GIVEREF(__pyx_kp_u__16);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__16);
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
@@ -7910,11 +7920,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
__pyx_t_3 = 0;
__Pyx_INCREF(__pyx_kp_u__19);
__Pyx_INCREF(__pyx_kp_u__17);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 8;
__Pyx_GIVEREF(__pyx_kp_u__19);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__19);
__Pyx_GIVEREF(__pyx_kp_u__17);
PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__17);
__pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -7925,11 +7935,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_6 = 0;
__pyx_t_7 = 127;
__Pyx_INCREF(__pyx_kp_u__18);
__Pyx_INCREF(__pyx_kp_u__16);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 25;
__Pyx_GIVEREF(__pyx_kp_u__18);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__18);
__Pyx_GIVEREF(__pyx_kp_u__16);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__16);
__pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7;
@@ -7937,11 +7947,11 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
__pyx_t_2 = 0;
__Pyx_INCREF(__pyx_kp_u__19);
__Pyx_INCREF(__pyx_kp_u__17);
__pyx_t_7 = (65535 > __pyx_t_7) ? 65535 : __pyx_t_7;
__pyx_t_6 += 8;
__Pyx_GIVEREF(__pyx_kp_u__19);
PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__19);
__Pyx_GIVEREF(__pyx_kp_u__17);
PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__17);
__pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -7974,7 +7984,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__pyx_t_8 = 0;
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_prices, __pyx_t_3) < 0) __PYX_ERR(0, 228, __pyx_L9_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_provider_token, __pyx_kp_u__20) < 0) __PYX_ERR(0, 228, __pyx_L9_error)
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_provider_token, __pyx_kp_u__18) < 0) __PYX_ERR(0, 228, __pyx_L9_error)
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_3);
@@ -8083,7 +8093,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__21, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 237, __pyx_L22_error)
__pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_kp_u__19, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 237, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = NULL;
@@ -8128,7 +8138,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_kp_u__22};
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_kp_u__20};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L22_error)
@@ -8271,7 +8281,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_17generator5(__pyx_Coro
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_kp_u__29};
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_kp_u__27};
__pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 240, __pyx_L1_error)
@@ -8444,7 +8454,7 @@ static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_18on_pre_checkout_query
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_pre_checkout_query);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pre_checkout_query);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_20generator6, __pyx_codeobj__30, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 244, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_20generator6, __pyx_codeobj__28, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_on_pre_checkout_query, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 244, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -8651,7 +8661,7 @@ static PyObject *__pyx_pf_8handlers_8payments_9stars_pay_21on_successful_payment
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_message);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_23generator7, __pyx_codeobj__31, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_successful_payment, __pyx_n_s_on_successful_payment, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 249, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_9stars_pay_23generator7, __pyx_codeobj__29, (PyObject *) __pyx_cur_scope, __pyx_n_s_on_successful_payment, __pyx_n_s_on_successful_payment, __pyx_n_s_handlers_payments_stars_pay); if (unlikely(!gen)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -8753,7 +8763,7 @@ static PyObject *__pyx_gb_8handlers_8payments_9stars_pay_23generator7(__pyx_Coro
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_u__32};
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_u__30};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 255, __pyx_L4_error)
@@ -10714,6 +10724,7 @@ static PyMethodDef __pyx_methods[] = {
static int __Pyx_CreateStringTabAndInitStrings(void) {
__Pyx_StringTabEntry __pyx_string_tab[] = {
{&__pyx_kp_u_21U68SOLOBOT, __pyx_k_21U68SOLOBOT, sizeof(__pyx_k_21U68SOLOBOT), 0, 1, 0, 0},
{&__pyx_n_s_AMOUNT_TEXT, __pyx_k_AMOUNT_TEXT, sizeof(__pyx_k_AMOUNT_TEXT), 0, 0, 1, 1},
{&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1},
{&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1},
{&__pyx_n_s_FSMContext, __pyx_k_FSMContext, sizeof(__pyx_k_FSMContext), 0, 0, 1, 1},
@@ -10731,25 +10742,24 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
{&__pyx_n_s_StatesGroup, __pyx_k_StatesGroup, sizeof(__pyx_k_StatesGroup), 0, 0, 1, 1},
{&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
{&__pyx_n_u_XTR, __pyx_k_XTR, sizeof(__pyx_k_XTR), 0, 1, 0, 1},
{&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0},
{&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0},
{&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0},
{&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0},
{&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0},
{&__pyx_n_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 1},
{&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0},
{&__pyx_n_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 1},
{&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0},
{&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0},
{&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0},
{&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0},
{&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0},
{&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0},
{&__pyx_kp_u__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 1, 0, 0},
{&__pyx_kp_u__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 1, 0, 0},
{&__pyx_kp_u__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 1, 0, 0},
{&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0},
{&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0},
{&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0},
{&__pyx_kp_u__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 1, 0, 0},
{&__pyx_kp_u__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 1, 0, 0},
{&__pyx_n_u__32, __pyx_k__32, sizeof(__pyx_k__32), 0, 1, 0, 1},
{&__pyx_kp_u__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 1, 0, 0},
{&__pyx_n_s__43, __pyx_k__43, sizeof(__pyx_k__43), 0, 0, 1, 1},
{&__pyx_n_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 1},
{&__pyx_kp_u__31, __pyx_k__31, sizeof(__pyx_k__31), 0, 1, 0, 0},
{&__pyx_n_s__41, __pyx_k__41, sizeof(__pyx_k__41), 0, 0, 1, 1},
{&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0},
{&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0},
{&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0},
@@ -10902,56 +10912,52 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
__pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u__9); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 123, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__11);
__Pyx_GIVEREF(__pyx_tuple__11);
__pyx_tuple__12 = PyTuple_Pack(2, __pyx_kp_u__11, __pyx_int_1); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__12);
__Pyx_GIVEREF(__pyx_tuple__12);
__pyx_tuple__14 = PyTuple_Pack(2, __pyx_kp_u__13, __pyx_int_1); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__14);
__Pyx_GIVEREF(__pyx_tuple__14);
__pyx_tuple__32 = PyTuple_Pack(4, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_e); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 34, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__32);
__Pyx_GIVEREF(__pyx_tuple__32);
__pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_back_to_pay_stars_after_invoice, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 34, __pyx_L1_error)
__pyx_tuple__34 = PyTuple_Pack(4, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_e); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 34, __pyx_L1_error)
__pyx_tuple__33 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 46, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__33);
__Pyx_GIVEREF(__pyx_tuple__33);
__pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_back_to_pay_stars, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 46, __pyx_L1_error)
__pyx_tuple__34 = PyTuple_Pack(10, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists, __pyx_n_s_e); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 52, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__34);
__Pyx_GIVEREF(__pyx_tuple__34);
__pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_back_to_pay_stars_after_invoice, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 34, __pyx_L1_error)
__pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_callback_pay_stars, 52, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 52, __pyx_L1_error)
__pyx_tuple__35 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 46, __pyx_L1_error)
__pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_u_stars_amount); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__35);
__Pyx_GIVEREF(__pyx_tuple__35);
__pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_back_to_pay_stars, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 46, __pyx_L1_error)
__pyx_tuple__36 = PyTuple_Pack(10, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists, __pyx_n_s_e); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 52, __pyx_L1_error)
__pyx_tuple__36 = PyTuple_Pack(7, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__36);
__Pyx_GIVEREF(__pyx_tuple__36);
__pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_callback_pay_stars, 52, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 52, __pyx_L1_error)
__pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_amount_selection, 133, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_u_stars_amount); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_tuple__37 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 189, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__37);
__Pyx_GIVEREF(__pyx_tuple__37);
__pyx_tuple__38 = PyTuple_Pack(7, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_enter_custom_amount, 189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_tuple__38 = PyTuple_Pack(5, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 203, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__38);
__Pyx_GIVEREF(__pyx_tuple__38);
__pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_amount_selection, 133, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_custom_amount_input, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_tuple__39 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_tuple__39 = PyTuple_Pack(1, __pyx_n_s_pre_checkout_query); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 244, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__39);
__Pyx_GIVEREF(__pyx_tuple__39);
__pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_enter_custom_amount, 189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_pre_checkout_query, 244, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 244, __pyx_L1_error)
__pyx_tuple__40 = PyTuple_Pack(5, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_builder, __pyx_n_s_e); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_tuple__40 = PyTuple_Pack(4, __pyx_n_s_message, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__40);
__Pyx_GIVEREF(__pyx_tuple__40);
__pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_process_custom_amount_input, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_s_pre_checkout_query); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 244, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__41);
__Pyx_GIVEREF(__pyx_tuple__41);
__pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_pre_checkout_query, 244, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 244, __pyx_L1_error)
__pyx_tuple__42 = PyTuple_Pack(4, __pyx_n_s_message, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__42);
__Pyx_GIVEREF(__pyx_tuple__42);
__pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_successful_payment, 249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 249, __pyx_L1_error)
__pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_stars_pay_py, __pyx_n_s_on_successful_payment, 249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_RefNannyFinishContext();
return 0;
__pyx_L1_error:;
@@ -11687,11 +11693,14 @@ if (!__Pyx_RefNanny) {
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
__pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS);
__Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS);
if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 19, __pyx_L1_error);
__Pyx_INCREF(__pyx_n_s_AMOUNT_TEXT);
__Pyx_GIVEREF(__pyx_n_s_AMOUNT_TEXT);
if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_AMOUNT_TEXT)) __PYX_ERR(0, 19, __pyx_L1_error);
__pyx_t_3 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -11699,6 +11708,10 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_AMOUNT_TEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_AMOUNT_TEXT, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
@@ -11953,7 +11966,7 @@ if (!__Pyx_RefNanny) {
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error)
@@ -11964,7 +11977,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 133, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_10process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_10process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -11995,7 +12008,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 189, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_13process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_13process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -12024,7 +12037,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 203, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_16process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L1_error)
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_16process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -12046,7 +12059,7 @@ if (!__Pyx_RefNanny) {
__pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pre_checkout_query, __pyx_n_s_PreCheckoutQuery) < 0) __PYX_ERR(0, 244, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_19on_pre_checkout_query, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_pre_checkout_query, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_19on_pre_checkout_query, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_pre_checkout_query, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -12074,7 +12087,7 @@ if (!__Pyx_RefNanny) {
__pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 249, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_22on_successful_payment, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_successful_payment, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
__pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_9stars_pay_22on_successful_payment, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_on_successful_payment, NULL, __pyx_n_s_handlers_payments_stars_pay, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -16228,7 +16241,7 @@ bad:
if (unlikely(!module_name_str)) { goto modbad; }
module_name = PyUnicode_FromString(module_name_str);
if (unlikely(!module_name)) { goto modbad; }
module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__33);
module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__31);
if (unlikely(!module_dot)) { goto modbad; }
full_name = PyUnicode_Concat(module_dot, name);
if (unlikely(!full_name)) { goto modbad; }
@@ -18079,7 +18092,7 @@ __Pyx_PyType_GetName(PyTypeObject* tp)
if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) {
PyErr_Clear();
Py_XDECREF(name);
name = __Pyx_NewRef(__pyx_n_s__43);
name = __Pyx_NewRef(__pyx_n_s__41);
}
return name;
}
+2106 -1747
View File
File diff suppressed because it is too large Load Diff
+174 -164
View File
@@ -2596,23 +2596,22 @@ static const char __pyx_k_i[] = "i";
static const char __pyx_k__2[] = "\320\235\320\260\321\200\321\203\321\210\320\265\320\275\320\260 \321\206\320\265\320\273\320\276\321\201\321\202\320\275\320\276\321\201\321\202\321\214 \321\204\320\260\320\271\320\273\320\276\320\262! \320\236\320\261\320\275\320\276\320\262\320\270\321\202\320\265\321\201\321\214 \321\201 \320\277\320\276\320\273\320\275\320\276\320\271 \320\267\320\260\320\274\320\265\320\275\320\276\320\271 \320\277\320\260\320\277\320\272\320\270!";
static const char __pyx_k__3[] = "\360\237\222\260 \320\222\320\262\320\265\321\201\321\202\320\270 \321\201\320\262\320\276\321\216 \321\201\321\203\320\274\320\274\321\203";
static const char __pyx_k__4[] = "\342\254\205\357\270\217 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__5[] = "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217:";
static const char __pyx_k__7[] = "|";
static const char __pyx_k__9[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214";
static const char __pyx_k__6[] = "|";
static const char __pyx_k__8[] = "\320\237\320\276\320\277\320\276\320\273\320\275\320\270\321\202\321\214";
static const char __pyx_k__9[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 ";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_id[] = "id";
static const char __pyx_k_Any[] = "Any";
static const char __pyx_k__10[] = "\320\222\321\213 \320\262\321\213\320\261\321\200\320\260\320\273\320\270 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 ";
static const char __pyx_k__11[] = " \321\200\321\203\320\261\320\273\320\265\320\271.";
static const char __pyx_k__13[] = "&";
static const char __pyx_k__14[] = "\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \321\205\321\215\321\210\320\260 \320\275\320\265 \320\277\321\200\320\276\320\271\320\264\320\265\320\275\320\260";
static const char __pyx_k__16[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__17[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.";
static const char __pyx_k__19[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 \320\275\321\203\320\273\321\217. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__20[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__21[] = "*";
static const char __pyx_k__22[] = ".";
static const char __pyx_k__29[] = "?";
static const char __pyx_k__10[] = " \321\200\321\203\320\261\320\273\320\265\320\271.";
static const char __pyx_k__12[] = "&";
static const char __pyx_k__13[] = "\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260 \321\205\321\215\321\210\320\260 \320\275\320\265 \320\277\321\200\320\276\320\271\320\264\320\265\320\275\320\260";
static const char __pyx_k__15[] = "\360\237\224\231 \320\235\320\260\320\267\320\260\320\264";
static const char __pyx_k__16[] = "\320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\277\320\276\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.";
static const char __pyx_k__18[] = "\320\241\321\203\320\274\320\274\320\260 \320\264\320\276\320\273\320\266\320\275\320\260 \320\261\321\213\321\202\321\214 \320\261\320\276\320\273\321\214\321\210\320\265 \320\275\321\203\320\273\321\217. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__19[] = "\320\235\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\320\260\321\217 \321\201\321\203\320\274\320\274\320\260. \320\237\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202\320\260, \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \321\201\321\203\320\274\320\274\321\203 \320\265\321\211\320\265 \321\200\320\260\320\267:";
static const char __pyx_k__20[] = "*";
static const char __pyx_k__21[] = ".";
static const char __pyx_k__28[] = "?";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_get[] = "get";
static const char __pyx_k_pay[] = "pay";
@@ -2693,6 +2692,7 @@ static const char __pyx_k_account_id[] = "account_id";
static const char __pyx_k_amount_str[] = "amount_str";
static const char __pyx_k_startswith[] = "startswith";
static const char __pyx_k_yoomoney_2[] = "yoomoney";
static const char __pyx_k_AMOUNT_TEXT[] = "AMOUNT_TEXT";
static const char __pyx_k_StatesGroup[] = "StatesGroup";
static const char __pyx_k_YOOMONEY_ID[] = "YOOMONEY_ID";
static const char __pyx_k_add_payment[] = "add_payment";
@@ -2815,6 +2815,7 @@ typedef struct {
PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook;
PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount;
PyTypeObject *__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input;
PyObject *__pyx_n_s_AMOUNT_TEXT;
PyObject *__pyx_kp_u_Account_ID;
PyObject *__pyx_n_s_Any;
PyObject *__pyx_n_s_F;
@@ -2837,22 +2838,21 @@ typedef struct {
PyObject *__pyx_n_s_YOOMONEY_ID;
PyObject *__pyx_n_s_YOOMONEY_SECRET_KEY;
PyObject *__pyx_kp_u__10;
PyObject *__pyx_kp_u__11;
PyObject *__pyx_kp_u__12;
PyObject *__pyx_kp_u__13;
PyObject *__pyx_kp_u__14;
PyObject *__pyx_kp_u__15;
PyObject *__pyx_kp_u__16;
PyObject *__pyx_kp_u__17;
PyObject *__pyx_kp_u__18;
PyObject *__pyx_kp_u__19;
PyObject *__pyx_kp_u__2;
PyObject *__pyx_kp_u__20;
PyObject *__pyx_n_s__21;
PyObject *__pyx_kp_u__22;
PyObject *__pyx_n_s__29;
PyObject *__pyx_n_s__20;
PyObject *__pyx_kp_u__21;
PyObject *__pyx_n_s__28;
PyObject *__pyx_kp_u__3;
PyObject *__pyx_kp_u__4;
PyObject *__pyx_kp_u__5;
PyObject *__pyx_kp_u__7;
PyObject *__pyx_n_u__9;
PyObject *__pyx_kp_u__6;
PyObject *__pyx_n_u__8;
PyObject *__pyx_kp_u__9;
PyObject *__pyx_n_s_account_id;
PyObject *__pyx_n_s_add_connection;
PyObject *__pyx_n_s_add_payment;
@@ -3001,17 +3001,17 @@ typedef struct {
PyObject *__pyx_int_200;
PyObject *__pyx_int_400;
PyObject *__pyx_codeobj_;
PyObject *__pyx_tuple__8;
PyObject *__pyx_tuple__7;
PyObject *__pyx_tuple__22;
PyObject *__pyx_tuple__23;
PyObject *__pyx_tuple__24;
PyObject *__pyx_tuple__25;
PyObject *__pyx_tuple__26;
PyObject *__pyx_tuple__27;
PyObject *__pyx_tuple__28;
PyObject *__pyx_codeobj__6;
PyObject *__pyx_codeobj__12;
PyObject *__pyx_codeobj__15;
PyObject *__pyx_codeobj__18;
PyObject *__pyx_codeobj__5;
PyObject *__pyx_codeobj__11;
PyObject *__pyx_codeobj__14;
PyObject *__pyx_codeobj__17;
} __pyx_mstate;
#if CYTHON_USE_MODULE_STATE
@@ -3064,6 +3064,7 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount);
Py_CLEAR(clear_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input);
Py_CLEAR(clear_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input);
Py_CLEAR(clear_module_state->__pyx_n_s_AMOUNT_TEXT);
Py_CLEAR(clear_module_state->__pyx_kp_u_Account_ID);
Py_CLEAR(clear_module_state->__pyx_n_s_Any);
Py_CLEAR(clear_module_state->__pyx_n_s_F);
@@ -3086,22 +3087,21 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_n_s_YOOMONEY_ID);
Py_CLEAR(clear_module_state->__pyx_n_s_YOOMONEY_SECRET_KEY);
Py_CLEAR(clear_module_state->__pyx_kp_u__10);
Py_CLEAR(clear_module_state->__pyx_kp_u__11);
Py_CLEAR(clear_module_state->__pyx_kp_u__12);
Py_CLEAR(clear_module_state->__pyx_kp_u__13);
Py_CLEAR(clear_module_state->__pyx_kp_u__14);
Py_CLEAR(clear_module_state->__pyx_kp_u__15);
Py_CLEAR(clear_module_state->__pyx_kp_u__16);
Py_CLEAR(clear_module_state->__pyx_kp_u__17);
Py_CLEAR(clear_module_state->__pyx_kp_u__18);
Py_CLEAR(clear_module_state->__pyx_kp_u__19);
Py_CLEAR(clear_module_state->__pyx_kp_u__2);
Py_CLEAR(clear_module_state->__pyx_kp_u__20);
Py_CLEAR(clear_module_state->__pyx_n_s__21);
Py_CLEAR(clear_module_state->__pyx_kp_u__22);
Py_CLEAR(clear_module_state->__pyx_n_s__29);
Py_CLEAR(clear_module_state->__pyx_n_s__20);
Py_CLEAR(clear_module_state->__pyx_kp_u__21);
Py_CLEAR(clear_module_state->__pyx_n_s__28);
Py_CLEAR(clear_module_state->__pyx_kp_u__3);
Py_CLEAR(clear_module_state->__pyx_kp_u__4);
Py_CLEAR(clear_module_state->__pyx_kp_u__5);
Py_CLEAR(clear_module_state->__pyx_kp_u__7);
Py_CLEAR(clear_module_state->__pyx_n_u__9);
Py_CLEAR(clear_module_state->__pyx_kp_u__6);
Py_CLEAR(clear_module_state->__pyx_n_u__8);
Py_CLEAR(clear_module_state->__pyx_kp_u__9);
Py_CLEAR(clear_module_state->__pyx_n_s_account_id);
Py_CLEAR(clear_module_state->__pyx_n_s_add_connection);
Py_CLEAR(clear_module_state->__pyx_n_s_add_payment);
@@ -3250,17 +3250,17 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_int_200);
Py_CLEAR(clear_module_state->__pyx_int_400);
Py_CLEAR(clear_module_state->__pyx_codeobj_);
Py_CLEAR(clear_module_state->__pyx_tuple__8);
Py_CLEAR(clear_module_state->__pyx_tuple__7);
Py_CLEAR(clear_module_state->__pyx_tuple__22);
Py_CLEAR(clear_module_state->__pyx_tuple__23);
Py_CLEAR(clear_module_state->__pyx_tuple__24);
Py_CLEAR(clear_module_state->__pyx_tuple__25);
Py_CLEAR(clear_module_state->__pyx_tuple__26);
Py_CLEAR(clear_module_state->__pyx_tuple__27);
Py_CLEAR(clear_module_state->__pyx_tuple__28);
Py_CLEAR(clear_module_state->__pyx_codeobj__6);
Py_CLEAR(clear_module_state->__pyx_codeobj__12);
Py_CLEAR(clear_module_state->__pyx_codeobj__15);
Py_CLEAR(clear_module_state->__pyx_codeobj__18);
Py_CLEAR(clear_module_state->__pyx_codeobj__5);
Py_CLEAR(clear_module_state->__pyx_codeobj__11);
Py_CLEAR(clear_module_state->__pyx_codeobj__14);
Py_CLEAR(clear_module_state->__pyx_codeobj__17);
return 0;
}
#endif
@@ -3291,6 +3291,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount);
Py_VISIT(traverse_module_state->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input);
Py_VISIT(traverse_module_state->__pyx_type_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input);
Py_VISIT(traverse_module_state->__pyx_n_s_AMOUNT_TEXT);
Py_VISIT(traverse_module_state->__pyx_kp_u_Account_ID);
Py_VISIT(traverse_module_state->__pyx_n_s_Any);
Py_VISIT(traverse_module_state->__pyx_n_s_F);
@@ -3313,22 +3314,21 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_n_s_YOOMONEY_ID);
Py_VISIT(traverse_module_state->__pyx_n_s_YOOMONEY_SECRET_KEY);
Py_VISIT(traverse_module_state->__pyx_kp_u__10);
Py_VISIT(traverse_module_state->__pyx_kp_u__11);
Py_VISIT(traverse_module_state->__pyx_kp_u__12);
Py_VISIT(traverse_module_state->__pyx_kp_u__13);
Py_VISIT(traverse_module_state->__pyx_kp_u__14);
Py_VISIT(traverse_module_state->__pyx_kp_u__15);
Py_VISIT(traverse_module_state->__pyx_kp_u__16);
Py_VISIT(traverse_module_state->__pyx_kp_u__17);
Py_VISIT(traverse_module_state->__pyx_kp_u__18);
Py_VISIT(traverse_module_state->__pyx_kp_u__19);
Py_VISIT(traverse_module_state->__pyx_kp_u__2);
Py_VISIT(traverse_module_state->__pyx_kp_u__20);
Py_VISIT(traverse_module_state->__pyx_n_s__21);
Py_VISIT(traverse_module_state->__pyx_kp_u__22);
Py_VISIT(traverse_module_state->__pyx_n_s__29);
Py_VISIT(traverse_module_state->__pyx_n_s__20);
Py_VISIT(traverse_module_state->__pyx_kp_u__21);
Py_VISIT(traverse_module_state->__pyx_n_s__28);
Py_VISIT(traverse_module_state->__pyx_kp_u__3);
Py_VISIT(traverse_module_state->__pyx_kp_u__4);
Py_VISIT(traverse_module_state->__pyx_kp_u__5);
Py_VISIT(traverse_module_state->__pyx_kp_u__7);
Py_VISIT(traverse_module_state->__pyx_n_u__9);
Py_VISIT(traverse_module_state->__pyx_kp_u__6);
Py_VISIT(traverse_module_state->__pyx_n_u__8);
Py_VISIT(traverse_module_state->__pyx_kp_u__9);
Py_VISIT(traverse_module_state->__pyx_n_s_account_id);
Py_VISIT(traverse_module_state->__pyx_n_s_add_connection);
Py_VISIT(traverse_module_state->__pyx_n_s_add_payment);
@@ -3477,17 +3477,17 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_int_200);
Py_VISIT(traverse_module_state->__pyx_int_400);
Py_VISIT(traverse_module_state->__pyx_codeobj_);
Py_VISIT(traverse_module_state->__pyx_tuple__8);
Py_VISIT(traverse_module_state->__pyx_tuple__7);
Py_VISIT(traverse_module_state->__pyx_tuple__22);
Py_VISIT(traverse_module_state->__pyx_tuple__23);
Py_VISIT(traverse_module_state->__pyx_tuple__24);
Py_VISIT(traverse_module_state->__pyx_tuple__25);
Py_VISIT(traverse_module_state->__pyx_tuple__26);
Py_VISIT(traverse_module_state->__pyx_tuple__27);
Py_VISIT(traverse_module_state->__pyx_tuple__28);
Py_VISIT(traverse_module_state->__pyx_codeobj__6);
Py_VISIT(traverse_module_state->__pyx_codeobj__12);
Py_VISIT(traverse_module_state->__pyx_codeobj__15);
Py_VISIT(traverse_module_state->__pyx_codeobj__18);
Py_VISIT(traverse_module_state->__pyx_codeobj__5);
Py_VISIT(traverse_module_state->__pyx_codeobj__11);
Py_VISIT(traverse_module_state->__pyx_codeobj__14);
Py_VISIT(traverse_module_state->__pyx_codeobj__17);
return 0;
}
#endif
@@ -3528,6 +3528,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_2_yoomoney_webhook
#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_3_process_enter_custom_amount
#define __pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input __pyx_mstate_global->__pyx_ptype_8handlers_8payments_12yoomoney_pay___pyx_scope_struct_4_process_custom_amount_input
#define __pyx_n_s_AMOUNT_TEXT __pyx_mstate_global->__pyx_n_s_AMOUNT_TEXT
#define __pyx_kp_u_Account_ID __pyx_mstate_global->__pyx_kp_u_Account_ID
#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any
#define __pyx_n_s_F __pyx_mstate_global->__pyx_n_s_F
@@ -3550,22 +3551,21 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_n_s_YOOMONEY_ID __pyx_mstate_global->__pyx_n_s_YOOMONEY_ID
#define __pyx_n_s_YOOMONEY_SECRET_KEY __pyx_mstate_global->__pyx_n_s_YOOMONEY_SECRET_KEY
#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10
#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11
#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12
#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13
#define __pyx_kp_u__14 __pyx_mstate_global->__pyx_kp_u__14
#define __pyx_kp_u__15 __pyx_mstate_global->__pyx_kp_u__15
#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16
#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17
#define __pyx_kp_u__18 __pyx_mstate_global->__pyx_kp_u__18
#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19
#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2
#define __pyx_kp_u__20 __pyx_mstate_global->__pyx_kp_u__20
#define __pyx_n_s__21 __pyx_mstate_global->__pyx_n_s__21
#define __pyx_kp_u__22 __pyx_mstate_global->__pyx_kp_u__22
#define __pyx_n_s__29 __pyx_mstate_global->__pyx_n_s__29
#define __pyx_n_s__20 __pyx_mstate_global->__pyx_n_s__20
#define __pyx_kp_u__21 __pyx_mstate_global->__pyx_kp_u__21
#define __pyx_n_s__28 __pyx_mstate_global->__pyx_n_s__28
#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3
#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4
#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5
#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7
#define __pyx_n_u__9 __pyx_mstate_global->__pyx_n_u__9
#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6
#define __pyx_n_u__8 __pyx_mstate_global->__pyx_n_u__8
#define __pyx_kp_u__9 __pyx_mstate_global->__pyx_kp_u__9
#define __pyx_n_s_account_id __pyx_mstate_global->__pyx_n_s_account_id
#define __pyx_n_s_add_connection __pyx_mstate_global->__pyx_n_s_add_connection
#define __pyx_n_s_add_payment __pyx_mstate_global->__pyx_n_s_add_payment
@@ -3714,17 +3714,17 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_int_200 __pyx_mstate_global->__pyx_int_200
#define __pyx_int_400 __pyx_mstate_global->__pyx_int_400
#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_
#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8
#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7
#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22
#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23
#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24
#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25
#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26
#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27
#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28
#define __pyx_codeobj__6 __pyx_mstate_global->__pyx_codeobj__6
#define __pyx_codeobj__12 __pyx_mstate_global->__pyx_codeobj__12
#define __pyx_codeobj__15 __pyx_mstate_global->__pyx_codeobj__15
#define __pyx_codeobj__18 __pyx_mstate_global->__pyx_codeobj__18
#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5
#define __pyx_codeobj__11 __pyx_mstate_global->__pyx_codeobj__11
#define __pyx_codeobj__14 __pyx_mstate_global->__pyx_codeobj__14
#define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17
/* #### Code section: module_code ### */
static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
@@ -4572,7 +4572,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_2generator(__pyx_Co
__pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_kp_u__5) < 0) __PYX_ERR(0, 95, __pyx_L1_error)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AMOUNT_TEXT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 95, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(0, 95, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 96, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
@@ -4840,7 +4843,7 @@ static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_3process_amount_sel
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1, __pyx_codeobj__6, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1, __pyx_codeobj__5, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_amount_selection, __pyx_n_s_process_amount_selection, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -4896,7 +4899,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_C
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GIVEREF(__pyx_t_1);
@@ -5126,7 +5129,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_C
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 130, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_n_u__9) < 0) __PYX_ERR(0, 130, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_text, __pyx_n_u__8) < 0) __PYX_ERR(0, 130, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 130, __pyx_L1_error)
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 130, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
@@ -5191,11 +5194,11 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_C
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_3 = 0;
__pyx_t_12 = 127;
__Pyx_INCREF(__pyx_kp_u__10);
__Pyx_INCREF(__pyx_kp_u__9);
__pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12;
__pyx_t_3 += 25;
__Pyx_GIVEREF(__pyx_kp_u__10);
PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__10);
__Pyx_GIVEREF(__pyx_kp_u__9);
PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__9);
__pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_12;
@@ -5203,11 +5206,11 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_5generator1(__pyx_C
__Pyx_GIVEREF(__pyx_t_9);
PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9);
__pyx_t_9 = 0;
__Pyx_INCREF(__pyx_kp_u__11);
__Pyx_INCREF(__pyx_kp_u__10);
__pyx_t_12 = (65535 > __pyx_t_12) ? 65535 : __pyx_t_12;
__pyx_t_3 += 8;
__Pyx_GIVEREF(__pyx_kp_u__11);
PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__11);
__Pyx_GIVEREF(__pyx_kp_u__10);
PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__10);
__pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_3, __pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -5384,7 +5387,7 @@ static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_6yoomoney_webhook(C
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_request);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_request);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2, __pyx_codeobj__12, (PyObject *) __pyx_cur_scope, __pyx_n_s_yoomoney_webhook, __pyx_n_s_yoomoney_webhook, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2, __pyx_codeobj__11, (PyObject *) __pyx_cur_scope, __pyx_n_s_yoomoney_webhook, __pyx_n_s_yoomoney_webhook, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 143, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -5654,10 +5657,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__12);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = NULL;
@@ -5690,10 +5693,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3);
__pyx_t_3 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__12);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_2 = NULL;
@@ -5726,10 +5729,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_kp_u__12);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = NULL;
@@ -5762,10 +5765,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_3);
__pyx_t_3 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_kp_u__12);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_2 = NULL;
@@ -5798,10 +5801,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_kp_u__12);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = NULL;
@@ -5834,10 +5837,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_1, 10, __pyx_t_3);
__pyx_t_3 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_kp_u__12);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_data, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_2 = NULL;
@@ -5870,10 +5873,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 12, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_kp_u__12);
__pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_notification_secret, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7;
@@ -5881,10 +5884,10 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 14, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_INCREF(__pyx_kp_u__13);
__Pyx_INCREF(__pyx_kp_u__12);
__pyx_t_6 += 1;
__Pyx_GIVEREF(__pyx_kp_u__13);
PyTuple_SET_ITEM(__pyx_t_1, 15, __pyx_kp_u__13);
__Pyx_GIVEREF(__pyx_kp_u__12);
PyTuple_SET_ITEM(__pyx_t_1, 15, __pyx_kp_u__12);
__pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_user_id_str, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7;
@@ -5983,7 +5986,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_8generator2(__pyx_C
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__14};
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13};
__pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error)
@@ -6617,7 +6620,7 @@ static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_9process_enter_cust
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3, __pyx_codeobj__15, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3, __pyx_codeobj__14, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_process_enter_custom_amount, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 174, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -6694,7 +6697,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3(__pyx_
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__16) < 0) __PYX_ERR(0, 179, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_text, __pyx_kp_u__15) < 0) __PYX_ERR(0, 179, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_callback_data, __pyx_n_u_pay_yoomoney) < 0) __PYX_ERR(0, 179, __pyx_L1_error)
__pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 179, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
@@ -6739,7 +6742,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_11generator3(__pyx_
__pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__17) < 0) __PYX_ERR(0, 183, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_text, __pyx_kp_u__16) < 0) __PYX_ERR(0, 183, __pyx_L1_error)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_builder, __pyx_n_s_as_markup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
@@ -7004,7 +7007,7 @@ static PyObject *__pyx_pf_8handlers_8payments_12yoomoney_pay_12process_custom_am
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_state);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_state);
{
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4, __pyx_codeobj__18, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 191, __pyx_L1_error)
__pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4, __pyx_codeobj__17, (PyObject *) __pyx_cur_scope, __pyx_n_s_process_custom_amount_input, __pyx_n_s_process_custom_amount_input, __pyx_n_s_handlers_payments_yoomoney_pay); if (unlikely(!gen)) __PYX_ERR(0, 191, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -7115,7 +7118,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__19};
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__18};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error)
@@ -7298,7 +7301,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__9) < 0) __PYX_ERR(0, 212, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_text, __pyx_n_u__8) < 0) __PYX_ERR(0, 212, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_url, __pyx_cur_scope->__pyx_v_payment_url) < 0) __PYX_ERR(0, 212, __pyx_L1_error)
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
@@ -7360,11 +7363,11 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 0;
__pyx_t_8 = 127;
__Pyx_INCREF(__pyx_kp_u__10);
__Pyx_INCREF(__pyx_kp_u__9);
__pyx_t_8 = (65535 > __pyx_t_8) ? 65535 : __pyx_t_8;
__pyx_t_7 += 25;
__Pyx_GIVEREF(__pyx_kp_u__10);
PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u__10);
__Pyx_GIVEREF(__pyx_kp_u__9);
PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u__9);
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_amount, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_8;
@@ -7372,11 +7375,11 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
__pyx_t_3 = 0;
__Pyx_INCREF(__pyx_kp_u__11);
__Pyx_INCREF(__pyx_kp_u__10);
__pyx_t_8 = (65535 > __pyx_t_8) ? 65535 : __pyx_t_8;
__pyx_t_7 += 8;
__Pyx_GIVEREF(__pyx_kp_u__11);
PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__11);
__Pyx_GIVEREF(__pyx_kp_u__10);
PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__10);
__pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -7431,7 +7434,7 @@ static PyObject *__pyx_gb_8handlers_8payments_12yoomoney_pay_14generator4(__pyx_
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__20};
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__19};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error)
@@ -8453,6 +8456,7 @@ static PyMethodDef __pyx_methods[] = {
static int __Pyx_CreateStringTabAndInitStrings(void) {
__Pyx_StringTabEntry __pyx_string_tab[] = {
{&__pyx_n_s_AMOUNT_TEXT, __pyx_k_AMOUNT_TEXT, sizeof(__pyx_k_AMOUNT_TEXT), 0, 0, 1, 1},
{&__pyx_kp_u_Account_ID, __pyx_k_Account_ID, sizeof(__pyx_k_Account_ID), 0, 1, 0, 0},
{&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1},
{&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1},
@@ -8475,22 +8479,21 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
{&__pyx_n_s_YOOMONEY_ID, __pyx_k_YOOMONEY_ID, sizeof(__pyx_k_YOOMONEY_ID), 0, 0, 1, 1},
{&__pyx_n_s_YOOMONEY_SECRET_KEY, __pyx_k_YOOMONEY_SECRET_KEY, sizeof(__pyx_k_YOOMONEY_SECRET_KEY), 0, 0, 1, 1},
{&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0},
{&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0},
{&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0},
{&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0},
{&__pyx_kp_u__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 1, 0, 0},
{&__pyx_kp_u__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 1, 0, 0},
{&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0},
{&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0},
{&__pyx_kp_u__18, __pyx_k__18, sizeof(__pyx_k__18), 0, 1, 0, 0},
{&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0},
{&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0},
{&__pyx_kp_u__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 1, 0, 0},
{&__pyx_n_s__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 0, 1, 1},
{&__pyx_kp_u__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 1, 0, 0},
{&__pyx_n_s__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 0, 1, 1},
{&__pyx_n_s__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 0, 1, 1},
{&__pyx_kp_u__21, __pyx_k__21, sizeof(__pyx_k__21), 0, 1, 0, 0},
{&__pyx_n_s__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 0, 1, 1},
{&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0},
{&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0},
{&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0},
{&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0},
{&__pyx_n_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 1},
{&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0},
{&__pyx_n_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 1},
{&__pyx_kp_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 0},
{&__pyx_n_s_account_id, __pyx_k_account_id, sizeof(__pyx_k_account_id), 0, 0, 1, 1},
{&__pyx_n_s_add_connection, __pyx_k_add_connection, sizeof(__pyx_k_add_connection), 0, 0, 1, 1},
{&__pyx_n_s_add_payment, __pyx_k_add_payment, sizeof(__pyx_k_add_payment), 0, 0, 1, 1},
@@ -8650,37 +8653,37 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
__pyx_tuple__8 = PyTuple_Pack(2, __pyx_kp_u__7, __pyx_int_1); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__8);
__Pyx_GIVEREF(__pyx_tuple__8);
__pyx_tuple__7 = PyTuple_Pack(2, __pyx_kp_u__6, __pyx_int_1); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__7);
__Pyx_GIVEREF(__pyx_tuple__7);
__pyx_tuple__23 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 40, __pyx_L1_error)
__pyx_tuple__22 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_session, __pyx_n_s_expected_hash, __pyx_n_s_tg_id, __pyx_n_s_builder, __pyx_n_s_i, __pyx_n_s_key_count, __pyx_n_s_exists); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 40, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__22);
__Pyx_GIVEREF(__pyx_tuple__22);
__pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_callback_pay_yoomoney, 40, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 40, __pyx_L1_error)
__pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_u_yoomoney_amount); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__23);
__Pyx_GIVEREF(__pyx_tuple__23);
__pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_callback_pay_yoomoney, 40, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 40, __pyx_L1_error)
__pyx_tuple__24 = PyTuple_Pack(1, __pyx_n_u_yoomoney_amount); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_tuple__24 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__24);
__Pyx_GIVEREF(__pyx_tuple__24);
__pyx_tuple__25 = PyTuple_Pack(9, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_data, __pyx_n_s_amount_str, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_amount_selection, 104, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_tuple__25 = PyTuple_Pack(11, __pyx_n_s_request, __pyx_n_s_data, __pyx_n_s_user_id_str, __pyx_n_s_amount_str, __pyx_n_s_notification_secret, __pyx_n_s_sha1_hash, __pyx_n_s_string_to_hash, __pyx_n_s_calculated_hash, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__25);
__Pyx_GIVEREF(__pyx_tuple__25);
__pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_amount_selection, 104, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_yoomoney_webhook, 143, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_tuple__26 = PyTuple_Pack(11, __pyx_n_s_request, __pyx_n_s_data, __pyx_n_s_user_id_str, __pyx_n_s_amount_str, __pyx_n_s_notification_secret, __pyx_n_s_sha1_hash, __pyx_n_s_string_to_hash, __pyx_n_s_calculated_hash, __pyx_n_s_user_id, __pyx_n_s_amount, __pyx_n_s_e); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_tuple__26 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 174, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__26);
__Pyx_GIVEREF(__pyx_tuple__26);
__pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_yoomoney_webhook, 143, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_enter_custom_amount, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_s_callback_query, __pyx_n_s_state, __pyx_n_s_builder); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_tuple__27 = PyTuple_Pack(7, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 191, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__27);
__Pyx_GIVEREF(__pyx_tuple__27);
__pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_enter_custom_amount, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_tuple__28 = PyTuple_Pack(7, __pyx_n_s_message, __pyx_n_s_state, __pyx_n_s_amount, __pyx_n_s_customer_id, __pyx_n_s_account_id, __pyx_n_s_payment_url, __pyx_n_s_confirm_keyboard); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 191, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__28);
__Pyx_GIVEREF(__pyx_tuple__28);
__pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_custom_amount_input, 191, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 191, __pyx_L1_error)
__pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_handlers_payments_yoomoney_pay_p, __pyx_n_s_process_custom_amount_input, 191, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 191, __pyx_L1_error)
__Pyx_RefNannyFinishContext();
return 0;
__pyx_L1_error:;
@@ -9388,11 +9391,14 @@ if (!__Pyx_RefNanny) {
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error)
__pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_n_s_PAYMENT_OPTIONS);
__Pyx_GIVEREF(__pyx_n_s_PAYMENT_OPTIONS);
if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_PAYMENT_OPTIONS)) __PYX_ERR(0, 21, __pyx_L1_error);
__Pyx_INCREF(__pyx_n_s_AMOUNT_TEXT);
__Pyx_GIVEREF(__pyx_n_s_AMOUNT_TEXT);
if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_AMOUNT_TEXT)) __PYX_ERR(0, 21, __pyx_L1_error);
__pyx_t_2 = __Pyx_Import(__pyx_n_s_handlers_texts, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9400,6 +9406,10 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_PAYMENT_OPTIONS, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_AMOUNT_TEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_AMOUNT_TEXT, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error)
@@ -9617,7 +9627,7 @@ if (!__Pyx_RefNanny) {
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_startswith); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
@@ -9628,7 +9638,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_6);
if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_4process_amount_selection, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_amount_selection, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -9642,7 +9652,7 @@ if (!__Pyx_RefNanny) {
__pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_request, __pyx_kp_s_web_Request) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_yoomoney_webhook, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_7yoomoney_webhook, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_yoomoney_webhook, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -9669,7 +9679,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_callback_query, __pyx_kp_s_types_CallbackQuery) < 0) __PYX_ERR(0, 174, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L1_error)
__pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_10process_enter_custom_amount, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_enter_custom_amount, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -9698,7 +9708,7 @@ if (!__Pyx_RefNanny) {
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_message, __pyx_kp_s_types_Message) < 0) __PYX_ERR(0, 191, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_state, __pyx_n_s_FSMContext) < 0) __PYX_ERR(0, 191, __pyx_L1_error)
__pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error)
__pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_8handlers_8payments_12yoomoney_pay_13process_custom_amount_input, __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_process_custom_amount_input, NULL, __pyx_n_s_handlers_payments_yoomoney_pay, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -13895,7 +13905,7 @@ static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *
#endif
static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) {
#if PY_MAJOR_VERSION < 3
PyObject *module, *from_list, *star = __pyx_n_s__21;
PyObject *module, *from_list, *star = __pyx_n_s__20;
CYTHON_UNUSED_VAR(parts_tuple);
from_list = PyList_New(1);
if (unlikely(!from_list))
@@ -13958,7 +13968,7 @@ static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple)
if (unlikely(!module_name_str)) { goto modbad; }
module_name = PyUnicode_FromString(module_name_str);
if (unlikely(!module_name)) { goto modbad; }
module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__22);
module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__21);
if (unlikely(!module_dot)) { goto modbad; }
full_name = PyUnicode_Concat(module_dot, name);
if (unlikely(!full_name)) { goto modbad; }
@@ -15809,7 +15819,7 @@ __Pyx_PyType_GetName(PyTypeObject* tp)
if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) {
PyErr_Clear();
Py_XDECREF(name);
name = __Pyx_NewRef(__pyx_n_s__29);
name = __Pyx_NewRef(__pyx_n_s__28);
}
return name;
}
+15 -11
View File
@@ -65,26 +65,30 @@ async def get_least_loaded_cluster() -> str:
str: Идентификатор наименее загруженного кластера.
"""
servers = await get_servers()
cluster_loads: dict[str, int] = dict.fromkeys(servers.keys(), 0)
server_to_cluster = {}
cluster_loads = {cluster: 0 for cluster in servers.keys()}
for cluster_name, cluster_servers in servers.items():
for server in cluster_servers:
server_to_cluster[server["server_name"]] = cluster_name
logger.info(f"Сопоставление серверов и кластеров: {server_to_cluster}")
async with asyncpg.create_pool(DATABASE_URL) as pool:
async with pool.acquire() as conn:
keys = await get_all_keys(conn)
for key in keys:
cluster_id = key["server_id"]
server_id = key["server_id"]
cluster_id = server_to_cluster.get(server_id, server_id)
if cluster_id in cluster_loads:
cluster_loads[cluster_id] += 1
logger.info(f"Cluster loads after database query: {cluster_loads}")
else:
logger.warning(f"⚠️ Сервер {server_id} не найден в известных кластерах!")
logger.info(f"Загруженность кластеров после запроса к БД: {cluster_loads}")
if not cluster_loads:
logger.warning("No clusters found in database or configuration.")
logger.warning("⚠️ В базе данных или конфигурации нет кластеров!")
return "cluster1"
least_loaded_cluster = min(cluster_loads, key=lambda k: (cluster_loads[k], k))
logger.info(f"Least loaded cluster selected: {least_loaded_cluster}")
logger.info(f"✅ Выбран наименее загруженный кластер: {least_loaded_cluster}")
return least_loaded_cluster
+1
View File
@@ -37,6 +37,7 @@ def build_management_kb() -> InlineKeyboardMarkup:
builder.button(text="🚫 Заблокировавшие бота", callback_data=AdminPanelCallback(action="bans").pack())
builder.button(text="🔄 Перезагрузить бота", callback_data=AdminPanelCallback(action="restart").pack())
builder.button(text="🌐 Сменить домен", callback_data=AdminPanelCallback(action="change_domain").pack())
builder.button(text="🔑 Восстановить пробники", callback_data=AdminPanelCallback(action="restore_trials").pack())
builder.row(build_admin_back_btn())
builder.adjust(1)
return builder.as_markup()
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -3
View File
@@ -1,5 +1,5 @@
from collections.abc import Awaitable, Callable
from typing import Any, Dict, Set, cast
from typing import Any
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, Message, TelegramObject
@@ -13,7 +13,6 @@ class AdminMiddleware(BaseMiddleware):
является ли пользователь администратором.
"""
# Кэш ID администраторов для быстрого доступа
_admin_ids: set[int] = set(ADMIN_ID) if isinstance(ADMIN_ID, list | tuple) else {ADMIN_ID}
async def __call__(
@@ -50,7 +49,6 @@ class AdminMiddleware(BaseMiddleware):
elif isinstance(event, CallbackQuery):
return event.from_user and event.from_user.id in self._admin_ids
# Для других типов событий пытаемся получить from_user
user_id = getattr(getattr(event, "from_user", None), "id", None)
return user_id in self._admin_ids if user_id else False
except Exception:
+1 -3
View File
@@ -1,5 +1,5 @@
from collections.abc import Awaitable, Callable
from typing import Any, Dict, Optional, TypedDict, Union
from typing import Any,TypedDict
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, InlineQuery, Message, TelegramObject, User
@@ -45,12 +45,10 @@ class LoggingMiddleware(BaseMiddleware):
"""
result: UserInfo = {"user_id": None, "username": None, "action": None}
# Обработка общих атрибутов для разных типов событий
if hasattr(event, "from_user") and isinstance(event.from_user, User):
result["user_id"] = event.from_user.id
result["username"] = event.from_user.username
# Определение типа действия в зависимости от типа события
if isinstance(event, Message):
result["action"] = f"Сообщение: {event.text}"
elif isinstance(event, CallbackQuery):
+1 -3
View File
@@ -1,5 +1,5 @@
from collections.abc import Awaitable, Callable
from typing import Any, Optional
from typing import Any
import asyncpg
@@ -17,11 +17,9 @@ class SessionMiddleware(BaseMiddleware):
event: TelegramObject,
data: dict[str, Any],
) -> Any:
# Создаем пул соединений при первом вызове
if self.pool is None:
self.pool = await asyncpg.create_pool(DATABASE_URL, min_size=5, max_size=20)
# Получаем соединение из пула
async with self.pool.acquire() as conn:
data["session"] = conn
return await handler(event, data)
+12 -19
View File
@@ -1,31 +1,24 @@
from collections.abc import Awaitable, Callable
from typing import Any, Dict
from aiogram import BaseMiddleware, Bot
from aiogram.types import CallbackQuery, TelegramObject
from aiogram.types import CallbackQuery
from cachetools import TTLCache
THROTTLE_TIME = 1.0
class ThrottlingMiddleware(BaseMiddleware):
def __init__(self) -> None:
self.cache = TTLCache(maxsize=10_000, ttl=THROTTLE_TIME)
self.throttle_notice_cache = TTLCache(maxsize=10_000, ttl=3.0)
self.cache = TTLCache(maxsize=10_000, ttl=1.0)
self.throttle_notice_cache = TTLCache(maxsize=10_000, ttl=1.0)
async def __call__(
self,
handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: dict[str, Any],
) -> Any:
bot: Bot | None = data.get("bot", None)
async def __call__(self, handler, event, data):
user_id = event.from_user.id if event.from_user else None
if user_id is None:
return await handler(event, data)
if user_id in self.cache:
current_count = self.cache.get(user_id, 0)
if current_count >= 3:
if isinstance(event, CallbackQuery) and user_id not in self.throttle_notice_cache:
self.throttle_notice_cache[user_id] = None
bot: Bot = data["bot"]
await bot.answer_callback_query(
callback_query_id=event.id,
text="Слишком много запросов! Пожалуйста, подождите...",
@@ -33,6 +26,6 @@ class ThrottlingMiddleware(BaseMiddleware):
)
return None
else:
self.cache[user_id] = None
self.cache[user_id] = current_count + 1
return await handler(event, data)
return await handler(event, data)
+1 -8
View File
@@ -21,20 +21,14 @@ class UserMiddleware(BaseMiddleware):
data: dict[str, Any],
) -> Any:
try:
# Получаем пользователя из данных события
if user := data.get("event_from_user"):
# Получаем сессию из контекста, если она есть
session = data.get("session")
# Обрабатываем пользователя и получаем его данные из БД
db_user = await self._process_user(user, session)
# Добавляем данные пользователя из БД в контекст
if db_user:
data["user"] = db_user
except Exception as e:
# Логируем ошибку, но не прерываем обработку события
logger.error(f"Ошибка при обработке пользователя: {e}")
# Продолжаем обработку события в любом случае
return await handler(event, data)
async def _process_user(self, user: User, session: Any = None) -> dict:
@@ -49,7 +43,6 @@ class UserMiddleware(BaseMiddleware):
dict: Словарь с информацией о пользователе из базы данных
"""
logger.debug(f"Обработка пользователя: {user.id}")
# Получаем данные пользователя из БД после вставки/обновления
user_data = await upsert_user(
tg_id=user.id,
username=user.username,
@@ -57,7 +50,7 @@ class UserMiddleware(BaseMiddleware):
last_name=user.last_name,
language_code=user.language_code,
is_bot=user.is_bot,
session=session, # Передаем сессию, если она есть
session=session,
)
logger.debug(f"Получены данные пользователя из БД: {user.id}")
+59 -32
View File
@@ -15,12 +15,13 @@ from logger import logger
last_ping_times = {}
last_notification_times = {}
last_down_times = {}
notified_servers = set()
PING_SEMAPHORE = asyncio.Semaphore(3)
async def ping_server(server_ip: str) -> bool:
"""Пингует сервер через ICMP или TCP 443, если ICMP недоступен или возникает ошибка."""
"""Пингует сервер через ICMP или TCP 443, если ICMP недоступен."""
async with PING_SEMAPHORE:
try:
response = ping(server_ip, timeout=3)
@@ -42,14 +43,8 @@ async def check_tcp_connection(host: str, port: int) -> bool:
return False
async def notify_admin(server_name: str):
"""Отправляет уведомление администраторам о недоступности сервера (не чаще чем раз в 3 минуты)."""
current_time = datetime.now()
last_notification_time = last_notification_times.get(server_name)
if last_notification_time and current_time - last_notification_time < timedelta(minutes=3):
return
async def notify_admin(server_name: str, status: str, down_duration: timedelta = None):
"""Отправляет уведомление администратору."""
builder = InlineKeyboardBuilder()
builder.row(
InlineKeyboardButton(
@@ -58,23 +53,27 @@ async def notify_admin(server_name: str):
)
)
for admin_id in ADMIN_ID:
await bot.send_message(
admin_id,
(
f"❌ <b>Сервер '{server_name}'</b> не отвечает более {PING_TIME * 3} секунд.\n\n"
"Проверьте соединение к серверу или удалите его из списка, чтобы не выдавать подписки на неработающий сервер."
),
reply_markup=builder.as_markup(),
if status == "down":
message = (
f"❌ <b>Сервер '{server_name}'</b> не отвечает!\n\n"
"Проверьте соединение или удалите его из списка, чтобы не выдавать подписки на неработающий сервер."
)
else:
downtime = str(down_duration).split(".")[0]
message = (
f"✅ <b>Сервер '{server_name}' снова в сети!</b>\n\n"
f"⏳ Время простоя: {downtime}."
)
last_notification_times[server_name] = current_time
for admin_id in ADMIN_ID:
logger.info(f"📨 Отправляем уведомление '{status}' администратору {admin_id} о сервере {server_name}")
await bot.send_message(admin_id, message, reply_markup=builder.as_markup())
async def check_servers():
"""
Периодическая проверка серверов.
Использует `asyncio.gather()` для ускорения.
Использует asyncio.gather() для ускорения.
"""
while True:
servers = await get_servers()
@@ -92,25 +91,53 @@ async def check_servers():
server_info_list.append((server_name, server_host))
tasks.append(ping_server(server_host))
logger.info(f"🔍 Начинаем проверку {len(server_info_list)} серверов...")
results = await asyncio.gather(*tasks, return_exceptions=True)
offline_servers = []
offline_servers = set()
restored_servers = set()
online_servers = set()
for (server_name, server_host), result in zip(server_info_list, results, strict=False):
is_online = bool(result) if not isinstance(result, Exception) else False
for (server_name, _), is_online in zip(server_info_list, results, strict=False):
if is_online:
last_ping_times[server_name] = current_time
online_servers.add(server_name)
if server_name in notified_servers:
down_time = last_down_times.pop(server_name, current_time)
down_duration = current_time - down_time
await notify_admin(server_name, "up", down_duration)
notified_servers.remove(server_name)
restored_servers.add(server_name)
else:
last_ping_time = last_ping_times.get(server_name)
if last_ping_time and current_time - last_ping_time > timedelta(seconds=PING_TIME * 3):
offline_servers.append(server_name)
await notify_admin(server_name)
elif not last_ping_time:
last_ping_times[server_name] = current_time
online_servers = [name for name, _ in server_info_list if name not in offline_servers]
logger.info(f"Проверка серверов завершена. Доступно: {len(online_servers)}, Недоступно: {len(offline_servers)}")
if offline_servers:
logger.warning(f"🚨 Не отвечает {len(offline_servers)} серверов: {', '.join(offline_servers)}")
if last_ping_time is None:
last_ping_times[server_name] = current_time
last_down_times[server_name] = current_time
if last_ping_time and (current_time - last_ping_time > timedelta(seconds=PING_TIME * 3)):
if server_name not in notified_servers:
logger.warning(f"🚨 Уведомление: сервер {server_name} не отвечает более {PING_TIME * 3} секунд!")
await notify_admin(server_name, "down")
notified_servers.add(server_name)
last_down_times[server_name] = current_time
offline_servers.add(server_name)
all_servers = {name for name, _ in server_info_list}
true_offline_servers = all_servers - online_servers
logger.info(f"✅ Доступно серверов: {len(online_servers)}, ❌ Недоступно: {len(true_offline_servers)}")
if true_offline_servers:
logger.warning(f"🚨 Не отвечает {len(true_offline_servers)} серверов: {', '.join(true_offline_servers)}")
if restored_servers:
logger.info(f"✅ Восстановились {len(restored_servers)} серверов: {', '.join(restored_servers)}")
await asyncio.sleep(PING_TIME)
@@ -118,4 +145,4 @@ async def check_servers():
def extract_host(api_url: str) -> str:
"""Извлекает хост из `api_url`."""
match = re.match(r"(https?://)?([^:/]+)", api_url)
return match.group(2) if match else api_url
return match.group(2) if match else api_url