Как получить ответ пользователя с помощью aiogram?
Вот так это можно сделать с помощью PyTelegramBotAPI
@bot.message_handler(commands = ["reg"])
def register(message):
bot.send_message(message.from_user.id, "Привет давай знакомиться,\nМеня зовут Юно, а тебя?")
bot.register_next_step_handler(message, reg_name)
def reg_name(message):
global name
name = message.text
bot.send_message(message.from_user.id, "Приятно познакомится, " + name + " \nА как ваша фамилия?")
bot.register_next_step_handler(message, reg_surname)
def reg_surname(message):
global surname
surname = message.text
Или вот тот же код но на PyTelegramBotAPI
@bot.message_handler(commands = ["weather"])
def city(message):
# We get the city about which you need to provide information.
bot.send_message(message.from_user.id, "О каком городе хотите увидеть информацию?")
bot.register_next_step_handler(message, answer_cities)
def answer_cities(message):
# Parse the json file.
answer = requests.get("https://api.weatherbit.io/v2.0/current?city=" + message.text + "&lang=ru&key=)
А как подобное можно реализовать с "aiogram"? Нужно получить название города который ввел пользователь.
@dp.message_handler(commands = ["weather"])
async def weather(message: types.Message):
await bot.send_message(message.from_user.id, "город")
@dp.message_handler()
async def names(message: types.Message):
try:
full = message.text
print(full)
answer = requests.get("https://api.weatherbit.io/v2.0/current?city=" + full + "&lang=ru&key=")
Ответы (1 шт):
Автор решения: MyZik
→ Ссылка
Для этого есть FSM. Если оптимизировать пример по ссылке для Вашего случая, то выглядеть это будет примерно так:
...
class WeatherForm(StatesGroup):
city = State() # Will be represented in storage as 'WeatherForm:city'
@dp.message_handler(commands='weather')
async def cmd_weather(message: types.Message):
await WeatherForm.city.set()
await message.reply("Введите Ваш город")
# You can use state '*' if you need to handle all states
@dp.message_handler(state='*', commands='cancel')
@dp.message_handler(Text(equals='cancel', ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
"""
Allow user to cancel any action
"""
current_state = await state.get_state()
if current_state is None:
return
logging.info('Cancelling state %r', current_state)
# Cancel state and inform user about it
await state.finish()
# And remove keyboard (just in case)
await message.reply('Cancelled.', reply_markup=types.ReplyKeyboardRemove())
@dp.message_handler(state=WeatherForm.city)
async def process_city(message: types.Message, state: FSMContext):
city = message.text
answer = requests.get(f"https://api.weatherbit.io/v2.0/current?city={city}&lang=ru&key=")
# Тут делайте всё, что Вам нужно
await state.finish()