Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как получить id из другой функции

ваня ломовцев Знаток (314), на голосовании 3 месяца назад
 @router.callback_query(F.data.startswith('ticket_'))
async def tickets_ans(callback: CallbackQuery):
number = callback.data.split("_")[1]
ticket_data = await rq.get_ticket_info(callback.data.split("_")[1])
await callback.answer(f'Вы выбрали тикет №{callback.data.split("_")[1]}')
await callback.message.answer(f'Вы выбрали тикет №{callback.data.split("_")[1]}\n id: {ticket_data.tg_id} \n ФИО: {ticket_data.fio} \n Описание: {ticket_data.description}\n Выберите действие:',
reply_markup = kb.ticket_red)


@router.callback_query(F.data == 'ticket_answer')
async def tickets_ans(callback: CallbackQuery, bot: Bot, state: FSMContext):
callback.answer("Введите ответ")
rq.get_ticket_info()
как получить id тикета во второй функции?
Голосование за лучший ответ
Dnitrij Shishelov Ученик (119) 4 месяца назад
from aiogram import types, Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext

class TicketForm(StatesGroup):
waiting_for_ticket_id = State()

@dp.callback_query_handler(lambda c: c.data.startswith('ticket_'))
async def process_callback_button1(callback_query: types.CallbackQuery, state: FSMContext):
# Получаем номер тикета из данных обратного вызова
number = callback_query.data.split("_")[1]

# Получаем информацию о тикете
ticket_data = await get_ticket_info(number) # Предполагается, что get_ticket_info - это асинхронная функция, возвращающая данные тикета

# Сохраняем данные тикета в контексте состояния
await TicketForm.waiting_for_ticket_id.set()
await state.update_data(ticket=ticket_data)

# Отправляем сообщение пользователю
await callback_query.answer(f'Вы выбрали тикет №{number}')
await callback_query.message.reply(f'Вы выбрали тикет №{number}\n id: {ticket_ data.tg _id} \n ФИО: {ticket_data.fio} \n Описание: {ticket_data.description}\n Выберите действие:', reply_markup=kb.ticket_red)

@dp.callback_query_handler(lambda c: c.data == 'ticket_answer', state=TicketForm.waiting_for_ticket_id)
async def process_callback_button2(callback_query: types.CallbackQuery, state: FSMContext):
# Получаем данные тикета из контекста состояния
ticket_data = await state.get_data()
ticket_id = ticket_data['ticket'].tg_id # Получаем ID тикета

# Здесь вы можете использовать ticket_id для выполнения необходимых действий
await callback_query.answer("Введите ответ")

# Асинхронная функция для имитации получения информации о тикете
async def get_ticket_info(number):
return {"tg_id": f"ID_{number}", "fio": "Иванов Иван Иванович", "description": "Тестовое описание"}

if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Похожие вопросы