Teletob как записать сообщение пользователя в переменную?
У меня есть кнопка «Добавить задание»
После которой пользователю предлагается отправить боту ссылку.
Нужно скопировать эту ссылку и добавить в txt файл,не могу понять как это реализовать.
Работаю через TeleBot
- Вопрос задан более трёх лет назад
- 3623 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 1
1. у бота есть register_next_step_handler
к примеру он отвечает «дай ссылку» и после ответа пользователя выполняет функцию указанную в register_next_step_handler
2. Просто достать сообщение?
@bot.message_handler(func=lambda message: True) def handle_message(message): print(message.text) // вывод сообщения которое написал пользователь sent = bot.send_message(message.chat.id, "Введите ссылку :") bot.register_next_step_handler(sent, save_link) def save_link(message): my_link = message.text bot.send_message(message.chat.id, "Сохранил!")
только , конечно же, добавте валидаторы для message.text чтоб это ссылки были
Ответ написан более трёх лет назад
Нравится 1 2 комментария
Drayvod @Drayvod Автор вопроса
Спасибо,опираясь на ваш код я решил проблему по своему)
Юра Милевский @Hackerman1
Что за валидаторы?
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +2 ещё
Python как получить данные из 1С находящейся на удаленном рабочем столе?
- 1 подписчик
- 20 минут назад
- 12 просмотров
Как получить сообщение от user’a, которое он отправил в ответ на сообщение бота?
Как внутри функции получить сообщение от пользователя? То есть есть ли метод в каком-нибудь фреймворке (twx.botapi, telebot etc.), чтобы не через getUpdates костыльным способом получать сообщение?
Отслеживать
задан 13 авг 2017 в 19:23
63 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
судя по всему хотели получить вот это:
@bot.message_handler(commands=['command']) def _command_(message): bot.send_message(message.chat.id, "Введите имя: ") bot.register_next_step_handler(message, add_user) def add_user(message): #тут функция записи в бд pass
Создаём Telegram-бота на Python с помощью pyTelegramBotAPI (telebot)

Сегодня будем учиться создавать ботов в Telegram с помощью Python.
Попробуем заставить бота присылать сводку погоды по нашему городу.
Нам потребуется:
- Компьютер или ноутбук (При должном усердии можно попробовать на телефоне).
- Python 3 (Мы будем работать на версии 3.10).
- Редактор кода (Я использую PyCharm).
- Соединение с интернетом.
У всех на слуху две библиотеки для разработки telegram-ботов, это:
— telebot (он же pyTelegramBotAPI),
— aiogram.
Мы будем использовать telebot как более простой инструмент для личного пользования. Посмотрим как запустить первого бота, что для этого нужно и на что он способен.
Как и aiogram, telebot является адаптацией API telegram для взаимодействия с ответами от сайта. Со справкой API telegram можно ознакомиться тут https://core.telegram.org/. Там же вы сможете узнать подробнее об ответах API.
Получение токена для Telegram-бота
Чтобы создать нашего первого бота на Python надо обратиться к официальному боту от Telegram — BotFather. Там можно создать бота и получить его токен. Токен – это аналог пароля, который позволит нам управлять ботом изнутри и программировать его ответы.
Переходим в BotFather — https://t.me/BotFather и нажимаем «Запустить»:

Дальше выбираем команду /newbot и следуем всем указанием, и в конце мы получаем токен нашего бота:

Установка библиотеки telebot и знакомство с pyTelegramBotAPI
После получения токена нужно скачать библиотеку telebot:
pip install pyTelegramBotAPI
если вы на macOS, то:
pip3 install pyTelegramBotAPI
Мы не будем раскладывать проект по модулям, поэтому у нас будет один исполнимый файл main.py. После создания файла надо импортировать библиотеку и наш токен:
import telebot api_token = 'Ваш токен вставлять сюда'
Первым делом следует инициализировать бота, передав в него токен, полученный от BotFather:
bot = telebot.TeleBot(api_token)
Дальше убедимся, что все корректно работает и заставим отправлять полученное сообщение обратно:
@bot.message_handler(content_types=['text']) def echo(message): bot.send_message(message.chat.id, text=f"")
Бот работает за cчёт декораторов, которые указывают, что мы хотим от него. Message handler – это обработчик всех сообщений, которые отправляет пользователь. В списке content_types перечисляем типы сообщений, которые хотим принимать. Можно указать text, audio, image и document.
У объекта bot есть множество методов, частью которых мы будем пользоваться. Основной из них — send message.
Чтобы заставить бота принимать сообщение, в конце файла пропишем:
bot.polling(none_stop=True)
Параметр none_stop указывает, что мы хотим принимать сообщения постоянно.
В стандартном положении параметр равен False, но мы ставим True.
После всех манипуляций получаем свое же сообщение:

Работа с API Яндекс Погоды
Перейдем к добавлению нужных функций — получению данных о погоде.
Для погоды мы будем пользоваться услугами бесплатного API от Яндекс Погоды:
https://yandex.ru/dev/weather/. Следует отметить, что бесплатный API от Яндекса ограничен 50 запросам в сутки. Если вас такое количество не устраивает, можно воспользоваться OpenWeather.
Запрос будет выглядеть так:
https://api.weather.yandex.ru/v2/informers?lat=55.75222&lon=37.61556
Запрос состоит из местоположения — в данном случае указаны координаты Москвы. Далее можно просить у пользователя геолокацию и присылать ему погоду по его координатам.
Для отправки GET-запроса к API Яндекс.Погоды нам поможет библиотека requests, а для обработки ответа — библиотека json.
pip install requests
pip3 install requests
Библиотека requests предназначена для работы с GET и POST запросами, которые обычный пользователь делает через браузер. Теперь же мы можем общаться с сервером через python оставляя браузер за скобками. Часто используют requests вместе с BS4 (beautiful soup 4), чтобы удобно получать и анализировать информацию из html кода. Но в наш случае другая задача.
API Яндекс.Погоды отдаёт данные в формате JSON, поэтому библиотека json подойдёт лучше всего. JSON основан на JavaScript объекте и часто используется при обмене данными. Раньше он использовался только на сайтаx для работы с текстовыми данными. Сейчас его используют почти везде для удобного обмена данными. JSON принимают все языки программирования, что является его большим плюсом. В python библиотека json уже установлена и не требует отдельной команды.
Добавляем импорт нужных библиотек:
import requests import json
До этого мы не затрагивали тему, как именно обрабатывать команды через слеш. Для этого у декоратора есть метод message_handlers, внутрь которого мы передаем название команд:
@bot.message_handler(commands=['get_weather', 'weather', 'pogoda']): def get_weather(message): pass
Для удобства выносим токен Яндекс.Погоды и ссылку в отдельные переменные:
url = "https://api.weather.yandex.ru/v2/informers?lat=55.75222&lon=37.61556" headers =
Отправим себе в Telegram полный ответ от API Яндекс.Погоды и проверим что все работает:
@bot.message_handler(commands=['get_weather', 'weather', 'pogoda']) def get_weather(message): r = requests.get(url=url, headers=headers) bot.send_message(message.chat.id, r.text)

После получения ответа сформируем нормальный ответ для пользователя. Сразу сделаем проверку на status_code, чтобы оповестить пользователя, если проблемы на стороне API. После получения ответа от API в текстовом формате, надо перевести его в словарь. Для этого подключаем библиотеку json — в функцию loads мы передаем текст ответа, а на выходе получаем объект типа dict (словарь):
@bot.message_handler(commands=['get_weather', 'weather', 'pogoda']) def get_weather(message): r = requests.get(url=url, headers=headers) bot.send_message(message.chat.id, r.text) if r.status_code == 200: data = json.loads(r.text) fact = data["fact"] bot.send_message(message.chat.id, text=f'Now in Moscow °, feels like °. Now on the street ') else: bot.send_message(message.chat.id, 'Problems on weather API')
Теперь бот отправляет температуру, как она ощущается и какая сейчас погода:

Настройка команд для telegram-бота
Нам осталось сделать реакцию на команду /start. Она будет выводить команду для получения данных о погоде:
@bot.message_handler(commands=['start']) def get_weather(message): bot.send_message(message.chat.id, text=f'Hello, ! \n\nI can show you the weather with: \n/weather\n/pogoda\n/get_weather')
Мы обращаемся к информации, которая приходит нам в сообщении пользователя, чтобы получить из нее имя пользователя. Подробнее узнать о сообщениях пользователей можно тут https://core.telegram.org/constructor/message.
Теперь создадим подсказки для пользователей. Библиотека pyTElegramBotAPI не позволяет из кода редактировать подсказки для написания команды. Чтобы это сделать нам потребуется несколько операций в BotFather:

- кликаем на меню
- выбираем команду /mybots
- ищем нашего бота
- edit bot
- и выбираем edit commands
- дальше вводим нашу команду (Пример: команда – описание)
После всех манипуляций у нас появится всплывающая менюшка с командами:

Финальный код Telegram-бота на Python
Мы с вами затронули лишь малу часть того, что можно сделать с помощью python и Telegram. Telebot — не самая лучшая библиотека для создания ботов под большую аудитории. Если вы хотите писать бот для магазинов, вам потребуется более сильные инструменты разработки, которые есть в aiogram.
Если вам хочется потренироваться самостоятельно — попробуйте написать бота со следующими функциями: конвертор валюты, сводка по курсу валюты.
Весь код из урока:
import telebot import requests import json api_token = '5347819163:********lZu1qWQc5f55DPk' url = "https://api.weather.yandex.ru/v2/informers?lat=55.75222&lon=37.61556" headers = bot = telebot.TeleBot(api_token) @bot.message_handler(commands=['start']) def get_weather(message): bot.send_message(message.chat.id, text=f'Hello, ! \n\nI can show you the weather with: \n/weather\n/pogoda\n/get_weather') @bot.message_handler(commands=['get_weather', 'weather', 'pogoda']) def get_weather(message): r = requests.get(url=url, headers=headers) bot.send_message(message.chat.id, r.text) if r.status_code == 200: data = json.loads(r.text) fact = data["fact"] bot.send_message(message.chat.id, text=f'Now in Moscow °, feels like °. Now on the street ') else: bot.send_message(message.chat.id, 'Problems on weather API') bot.polling(none_stop=True)
Как получить сообщение пользователя в телеграм-боте?
Помогите пожалуйста, никак не могу получить через данные функции сообщение пользователя, постоянно получаю последнее сообщение от бота(
Хотя в другой функции таким же методом получаю именно сообщение юзера (только без call):
input_summa_mess = call.message.text print(input_summa_mess)
Часть кода, в которой проблема:
@bot.message_handler(content_types=['text']) def func(message): if (message.text == "Рассчет"): vozrast = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("0-3 года", callback_data='do_treh') button2 = types.InlineKeyboardButton("3-5 лет", callback_data='do_paty') button3 = types.InlineKeyboardButton("Старше 5 лет", callback_data='bolshe') vozrast.add(button1, button2, button3) bot.send_message(message.chat.id, ",Выбери возраст авто".format(message.from_user), reply_markup=vozrast) # plus_one(message) @bot.callback_query_handler(func=lambda call: call.data == "bolshe") def mess(call: types.CallbackQuery): vozrast = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("0-3 года", callback_data='do_treh') button2 = types.InlineKeyboardButton("3-5 лет", callback_data='do_paty') button3 = types.InlineKeyboardButton("Старше 5 лет", callback_data='bolshe') vozrast.add(button1, button2, button3) bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='предупреждение', reply_markup=vozrast) @bot.callback_query_handler(func=lambda call: call.data == "do_treh") def mess(call: types.CallbackQuery): bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Просто отправь мне стоимость авто') input_summa_mess = call.message.text print(input_summa_mess)
- Вопрос задан 04 мая 2023
- 192 просмотра
1 комментарий
Средний 1 комментарий