Как преобразовать State в int?
Я делаю бота с подписками и для этого надо как то пополнять баланс что очевидно, я сделал это при помощи Qiwi. В тестах я использовал фиксированную стоимость с помощью переменной, сейчас же я решил сделать так что бы пользователь смог сам указывать сумму пополнения, однако я получаю ошибку когда сравниваю количество пришедших денег и число которое ввёл пользователь. Так же прикладываю весь код платёжки с ошибкой(ошибка в строке 84).
from misc import bot, dp, conn, cursor
from .functions import *
import requests
from multiprocessing import Process, Queue
from aiogram import executor, types
from aiogram.utils.helper
import Helper, HelperMode, ListItem
import os
import json
from config import * #именно в конфиге находяться все данные киви
import random
import time
from time import gmtime
from time import strftime
import handlers.keyboard as kb
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from aiogram.dispatcher.filters.state import State, StatesGroup
class st(StatesGroup):
item = State()
@dp.message_handler(text=['Пополнения и подписки'])
async def fag(message: types.Message):
user = message.from_user
chat = message.chat
balance = await get_balance(message)
podpiska = await get_podp(message)
if podpiska == 0:
podp = "нету?"
else:
get = cursor.execute("SELECT podp_time FROM users WHERE id=?", (user.id,)).fetchall()
ptime = f"{int(get[0][0])}"
podp_time = time.time() - float(ptime)
vremya = strftime("%j дней %H часов %M минут", gmtime(podp_time))
podp = f"осталось <code>{vremya}</code>"
await bot.send_message(message.chat.id,f"<b>?Баланс:</b> <code>{balance}</code>\n"
f"<b>?Подписка:</b> {podp}",reply_markup=kb.qiw)
@dp.callback_query_handler(lambda c: c.data == "popol")
async def show(callback_query: types.CallbackQuery):
await bot.send_message(callback_query.message.chat.id,"Введите сумму пополнения",reply_markup=kb.back)
await st.item.set()
@dp.message_handler(state=st.item)
async def proc(message: types.Message, state: FSMContext):
if message.text == 'Отмена':
await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.menu)
await state.finish()
else:
if message.text.isdigit():
coment = ''.join(random.choices('qwertyuiopsdfghjkl;zxcvbnm',k=10)) + str(random.randint(1, 1000))
amount = message.text
s = requests.Session()
s.headers['authorization'] = 'Bearer' + token
parameters = {'publicKey':publick_key,'amount':message.text,'phone':phone,'comment':coment}
h = s.get('https://oplata.qiwi.com/create', params = parameters)
inlinepay_keyboard = types.InlineKeyboardMarkup()
pay_sub = types.InlineKeyboardButton('Пополнить баланс', url=h.url)
check_pay = types.InlineKeyboardButton(text='Проверить оплату QIWI?',callback_data='checkpay')
inlinepay_keyboard = inlinepay_keyboard.add(pay_sub).add(check_pay)
await bot.send_message(message.chat.id, f'Для оплаты нажмите на кнопку ниже.', reply_markup=inlinepay_keyboard)
new_payment(message.chat.id,coment,amount)
await state.finish()
else:
await message.answer('Вы вводите буквы...\nВведите цифры')
@dp.callback_query_handler(text='checkpay')
async def check_payment(query: types.CallbackQuery):
coment = get_comment(query.message.chat.id)
s = requests.Session()
s.headers['authorization'] = 'Bearer ' + token
parameters = {'rows': '50', 'operation':'IN'}
h = s.get('https://edge.qiwi.com/payment-history/v1/persons/'+ phone +'/payments', params = parameters)
result = json.loads(h.text)
for i in range(len(result['data'])):
if result['data'][i]['coment'] == str(coment):
if result['data'][i]['sum']['amount'] >= st.item:#как раз таки место с ошибкой
await bot.send_message(query.message.chat.id,'Оплата прошла,добавил вас в базу')
add_sub(query.message.chat.id)
break
else:
await bot.send_message(query.message.chat.id, 'Не нашел вашу оплату')
break
Ответы (1 шт):
Автор решения: Sorrow
→ Ссылка
Для тех кто столкнётся с такой же проблемой, решение: записывайте в бд сумму пополнения в отдельный столбец и уже его сравнивайте с пришедшим платежом