Как запустить FSM state с юзером из чата в Aiogram 3?
Бот отправляет в чат кнопку с запросом проголосовать
@router.message(Command("startvoting", prefix="/!"))
async def start_voting(message: Message):
await message.answer(start_voting_announce, reply_markup=vote_button())
По нажатию отправляет участнику сообщение в лс, но сама сессия голосования начинается в группе
@router.callback_query(F.data == 'vote')
async def vote(call: CallbackQuery, bot: Bot, state: FSMContext):
user_id = call.from_user.id
await bot.send_message(user_id, vote_session_message)
await state.set_state(Voting.cast_vote)
await call.answer()
Можно ли каким то образом задать, где будет запущен state?
Ответы (1 шт):
Автор решения: whyte322
→ Ссылка
В общем реализовал через передачу в кнопку deep link
from aiogram.utils.deep_linking import create_start_link
@router.callback_query(F.data == 'vote')
async def vote(call: CallbackQuery, bot: Bot, state: FSMContext):
link = await create_start_link(call.bot, 'vote', encode=True)
await call.answer(
url=link
)
FSM стейт запускаю уже в чате с юзером при старте бота с диплинка:
@router.message(CommandStart(deep_link=True))
async def vote(message: Message, state: FSMContext, command: CommandObject):
decode = decode_payload(command.args)
if decode == 'vote':
await message.answer(vote_session_message)
await state.set_state(Voting.cast_vote)