@nickie000

Как проверить боту что пользователь отправил именно контакт aiogram?

пример: бот просит отправить человека его номер и говорит что можно нажать кнопку и отправить свой контакт через request_contact=True, но пользователь решил вписать номер самостоятельно.
Как сделать проверку и по числам и по контакту одновременно?
Своего кода нет, т.к. я немного не понимаю как это реализовать
есть функция проверки сообщения на числа:
async def check_int_return(message):
	try:
		int(message)
		return True
	except ValueError:
		return False

Знаю что можно в хэндлере словить content_types=types.ContentType.CONTACT, но не понимаю как мне сделать все вместе
  • Вопрос задан
  • 902 просмотра
Пригласить эксперта
Ответы на вопрос 1
@luhverchikv
В aiogram 3.x есть магический фильтр F.

Используя его, отпадает необходимость проводить проверку на числа, так как записать номер контакта на телефоне можно только цифрами. Если вам клиент сам напишет номер телефона, то магический фильтр (F.contact) просто его пропустит, так как он ожидает, что пользователь передаст только контакт.

Для проверки на подлинность номера (подразумевается, что клиент отправил свой номер, а не контакт своего друга), необходимо сравнить два юзер найди (message.contact.user_id и message.from_user.id), если они совпадают, то пользователь отправил свой контакт.

@router.message(F.contact)
async def save_phone_number(message: Message):
    phone = message.contact.phone_number
    if message.contact.user_id == message.from_user.id:
        await message.answer(f'Ваш номер телефона {phone} получен!')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы