Как в aiogram3 отправить боту сообщение, которое он обработает
У меня есть файл handlers.py
from aiogram import F, Router
from aiogram.filters import CommandStart, Command
from aiogram.types import Message, CallbackQuery
import app.keyboards as kb
router = Router()
@router.callback_query(F.data == 'addAcc')
async def send_GetAccounts(callback: CallbackQuery, state: FSMContext):
await state.set_state(Auth.token)
await callback.message.edit_text('Введите ссылку с токеном, полученный <a href=vkhost.github.io>ЗДЕСЬ</a>:',
reply_markup=kb.GetAccount, parse_mode='html', disable_web_page_preview=True)
тут я хочу что бы в функции send_GetAccounts
когда бот отправил сообщение Введите ссылку с токеном, полученный <a href=vkhost.github.io>ЗДЕСЬ</a>
, дальше пользователь отправляет сообщение боту и дальше бот что-то с этим сообщением в другой функции делал.
Как это можно сделать ?
ДОПОЛНЕНО:
class Auth(StatesGroup):
token = State()
@router.callback_query(StateFilter(None), F.data == 'addAcc')
async def send_GetAccounts(callback: CallbackQuery, state: FSMContext):
await state.set_state(Auth.token)
await callback.message.edit_text('Введите ссылку с токеном, полученный <a href=vkhost.github.io>ЗДЕСЬ</a>:',
reply_markup=kb.GetAccount, parse_mode='html', disable_web_page_preview=True)
def check_token(token):
access_token_match = re.search(r'access_token=([^&]+)', token).group(1)
if access_token_match:
access_token = access_token_match.group(1)
vk_session = vk_api.VkApi(token=access_token)
try:
vk_session.auth(token_only=True)
print('Авторизация прошла успешно')
return True
except vk_api.AuthError as err_msg:
print(err_msg)
return False
@router.message(Auth.token)
async def token_inputed(message: Message, state: FSMContext):
if check_token(message.text):
await message.answer("Успешно добавлен токен!")
await state.clear()
else:
await message.answer("Некорректно введен токен!")```
Ответы (1 шт):
Автор решения: FanaticExplorer
→ Ссылка
Вот так ловить такие сообщения:
@router.message(Auth.token)
async def token_inputed(message: Message, state: FSMContext):
if check_token(message.text): # типо проверяем полученные данные
await message.answer("Успешно добавлен токен!")
await state.clear()
else:
await message.answer("Некорректно введен токен!")
# ничего не делаем
Но тогда лучше добавить в ваш send_GetAccounts проверку, что мы сейчас не ожидаем токен:
from aiogram.fsm.state import StatesGroup, State
from aiogram.filters import StateFilter
@router.callback_query(StateFilter(None), F.data == 'addAcc')
# ...