Помогите разобраться с получением контакта библиотека telebot / python / telegram
Помогите понять, в чем ошибка, что не так делаю?
Нужно после нажатия кнопки - попросить контакт (должен предложить кнопку получения контакта, ну и после её нажатия, получить контакт).
# main.py
import telebot, cfg, kb, lg
from telebot import types
from requests import get
import requests
bot = telebot.TeleBot(cfg.token)
@bot.message_handler(regexp=f'^{lg.rbtn5e}$')
def phone(message):
bot.send_message(message.chat.id, lg.hello6e, reply_markup=kb.rkbu3)
@bot.message_handler(content_types=['contact'])
def contact(message):
if message.contact is not None:
bot.send_message(message.chat.id, lg.hello6u, reply_markup=kb.rkbu4)
@bot.message_handler(content_types=["location"])
def location(message):
if message.location is not None:
coord = str(message.location.longitude) + ',' + str(message.location.latitude)
r = requests.get('https://geocode-maps.yandex.ru/1.x/?apikey=' + apikey + '&format=json&kind=house&geocode=' + coord)
if len(r.json()['response']['GeoObjectCollection']['featureMember']) > 0:
address = r.json()['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['metaDataProperty'][
'GeocoderMetaData']['text']
bot.send_message(message.chat.id, '? Отлично, Теперь я знаю Ваш адрес. ?\n\n{}'.format(address))
bot.send_message(message.chat.id, lg.hello5u, reply_markup=kb.rkbu2)
else:
bot.send_message(message.chat.id, 'Упссс) ? ? ?n\nПроверьте правильность Вашей геолокации ??')
# lg.py
rbtn4u = "☎️ Отправить Ваш контакт"
rbtn4e = "? Отправить местоположение"
rbtn3e = "? Указать на карте ?"
rbtn3u = "⛪ Выбрать место"
rbtn5e = "? Cообщить оператору"
rbtn5u = "Отлично получил Ваш контакт"
# kb.py
import telebot, lg, cfg
from telebot import types
trkm = types.ReplyKeyboardMarkup
button_phone = types.KeyboardButton(lg.rbtn4u, request_contact=True)
button_geo = types.KeyboardButton(lg.rbtn4e, request_location=True)
#tostartlocation kb
rkbu1 = trkm(True, True, row_width=1)
rkbu1.add(button_geo)
#endlocation kb
rkbu2 = trkm(row_width=1, resize_keyboard=True)
rkbu2.add(lg.rbtn3e, lg.rbtn3u, lg.rbtn5e)
#startcontact kb
rkbu3 = trkm(True, True, row_width=1)
rkbu3.add(button_phone)
#endcontact kb
rkbu4 = trkm(row_width=1, resize_keyboard=True)
rkbu4.add(lg.rbtn5u)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Если клавиатуру в phone нужно показать при работе с кнопками из rkbu2 (rbtn3e = "? Указать на карте ?", rbtn3u = "⛪ Выбрать место", rbtn5e = "? Cообщить оператору"), то нужно не на команду /number обрабатывать метод, а на текст из кнопки.
Например через регулярку указывам, что ждем текст с полным совпадением с lg.rbtn5e (аналогичное можно сделать через лямбду, проверив текст из message)
Попробуйте:
@bot.message_handler(regexp=f'^{lg.rbtn5e}$')
def phone(message):
bot.send_message(message.chat.id, lg.rbtn4u, reply_markup=kb.rkbu3)