@poproboval

Почему aiogram выводит пустой объект?

from dotenv import load_dotenv
import os
import random


import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.dispatcher import FSMContext

load_dotenv()

BOT_TOKEN = os.getenv("BOT_TOKEN")
CHANEL_LINK = os.getenv("CHANEL_LINK")
CHANEL_ID=os.getenv("CHANEL_ID")
CHANEL_NAME="Chanel name"

def MESSAGE_TEXT_SWITCH_NUMBER(number): return f"Выберете число - {number}"
MESSAGE_TEXT_HELLO=f"Привет. Я администратор канала {CHANEL_NAME}\n Для того чтобы стать участником канала, пройдите капчу."
MESSAGE_TEXT_ENTER_CAPCHA="Для того чтобы стать участником нашего канала, нужно пройти капчу."


logging.basicConfig(level=logging.INFO)

storage = MemoryStorage()

class Capcha(StatesGroup):
			numbers= State()
			correct_number=State()
			message_id_capcha= State()


bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=storage)
			
def buttonsCapcha(arr):
			inline_keyboard = types.InlineKeyboardMarkup()
			for number in arr: inline_keyboard.add(types.InlineKeyboardButton(text=number,callback_data=number))
			return inline_keyboard



def generate_numbers(length=3):
		numbers=[]
		while len(numbers) < length:
			number=random.randrange(10, 100, 10)
			if number not in numbers: numbers.append(number)
		return numbers

def get_correct_number(arr): return random.choice(arr)



@dp.chat_join_request_handler(state='*')
async def some_handler(chat_member: types.ChatJoinRequest, state: FSMContext):
	
			
			await bot.send_message(chat_id=chat_member.from_user.id, text=MESSAGE_TEXT_HELLO)
			await state.set_state(state=Capcha)

			numbers=generate_numbers()
			correct_number= get_correct_number(numbers)

			async with state.proxy() as data: 
				data['numbers']=numbers
				data['correct_number']=correct_number

			capcha_data = await state.get_data()

			message=await bot.send_message(chat_id=chat_member.from_user.id, text=MESSAGE_TEXT_SWITCH_NUMBER(capcha_data['correct_number']), reply_markup=buttonsCapcha(capcha_data['numbers']))

			await state.update_data(message_id_capcha=message.message_id)
			
			
	
@dp.callback_query_handler(lambda callback_query: True, state='*' )
async def some_callback_handler(callback_query: types.CallbackQuery, state: FSMContext):
			await bot.answer_callback_query(callback_query_id=callback_query.id)
			capcha_data=await state.get_data()
			print(capcha_data) # Вывод: "{}"


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)


Всем привет. Когда я беру данные из state в @dp.chat_join_request_handler, всё работает отлично, но когда я хочу получить данные из state в @dp.callback_query_handler, то после нажатия на кнопку, я получаю пустой объект. Почему так? Как мне получить данные?
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы