{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

Урок №9. Создание бота для конвертации валют

В этом уроке мы закончим создавать telegram бота, который будет конвертировать валюты.

В прошлом уроке мы остановились на том, что создали кнопки для конвертации и проверяли ввод на правильность. Сегодня же мы с вами сделаем, чтобы наши кнопки функционировали и закончим создание бота.

Функционал кнопок.

Давайте создадим метод, который будет обрабатывать наши кнопки. Для этого мы прописываем декоратор @bot.callback_query_handler(), здесь мы прописываем параметр, который принимаем лямбда функцию. Функция будет принимать тоже один параметр call и будет возвращать значение True.

Далее мы прописываем функцию, например, callback. Тут мы принимаем один параметр call. Внутри же функции мы должны понять какую пару выбрал пользователь. Сначала мы будем обрабатывать только те кнопки, где уже есть значение валют(то есть все кнопки, кроме 'Другое значение'). Для этого создадим некую переменную, например, value, далее мы обращаемся с call.data, где и будет записан наш текст, который мы передаем. Этот текст нам необходимо перевести к верхнему регистру (upper), так как метод CurrencyConverter() принимает пары значений в верхнем регистре. После этого мы обращаемся к функции split(), которая позволяет нам разделить строку по определенному символу. Мы же будем делить по символу '/'.

Таким образом в value будет записан список из двух значений(это валюта, которую мы конвертируем и валюта, в которую мы конвертируем) и причем они будут приведены к верхнему регистру. Теперь создадим переменную, например, r. В ней мы обращаемся к cur(это объект на основе CurrencyConverter) и через этот объект обращаемся к функции convert(эта функция позволяет выполнить нам конвертацию). Тут мы указываем количество, то есть обращаемся к нашей глобальной переменной money. Далее нам необходимо указать валюту. Для этого нам необходимо обратиться к списку value и подставить первый элемент и второй. Таким образом функция convert будет принимать некое число и также будет принимать нашу пару валют.

Вывод на экран.

Теперь нам остается вывести все на экран. Для этого мы обращаемся с bot.send_message(), потом к call. Далее мы обращаемся к message, к chat и к id, далее мы указываем отформатированную строку. Тут я напишу 'Получается:', далее мы будем выводить наше конвертированное число и также здесь мы будем писать, что человек заново может вписать сумму. Это получается, что после конвертации данных, мы опять позволим пользователю ввести некую сумму. Давайте зарегистрируем функцию, которая будет обрабатывать эту сумму(в моем случае это функция summ). В эту функцию мы просто передаем message(поскольку это callback, то еще нам нужно обратиться к call).

Обработка кнопки 'Другое значение'.

На данном этапе у нас обрабатываются все кнопки, кроме кнопки 'Другое значение'. Для того чтобы эта кнопка обрабатывалась, мы обратимся к функции callback. И в ней мы будем проверять какой текст передается. В случае если текст наших данных значений не равен 'else', то тогда мы выполняем весь тот код, который у нас уже написан, иначе мы выполнять немного другой код. Здесь давайте мы будем отправлять пользователю сообщение(так же как и ранее bot.send_message(call.message.chat.id, "Введите пару значение через '/'")) и также мы должны зарегистрировать следующее действие, которая будет назваться, например, mycur. Теперь же мы создаем нашу функцию mycur. Тут мы принимаем параметр message. Тут мы по сути будем делать то же самое, что делали ранее. Мы также будем получать от пользователя данные, только уже через message text. Потом будем приводить их в верхний регистр, и будем разбивать по символу '/'. А далее мы должны сделать все то же самое, что делали ранее, только без значения call.

Исправление ошибок.

Но представим, если наш пользователь отправит нам некорректное значение, например, укажет валюты не через '/', а через пробел. Тогда же наш бот перестанет функционировать и сломается. Для исправления ошибки также добавим обработчик исключений. Мы с вами будем выполнить наш код, но в случае возникновения ошибки, мы будем отправлять пользователю сообщение, например, 'Что-то введено не корректно. Попробуйте ввести заново:'. И далее мы также регистрируем ту функцию, с которой мы работали для ввода купюр(в моем случае это функция mycur).

Давайте теперь проверим нашего бота.

А также вы можете подписаться на telegram канал, где будут выкладываться все коды с моих уроков, а также сами уроки: https://t.me/pythotelegram. Также на канале я прикреплю файл, со всеми доступными купюрами для конвертации валют.

Также после каждого урока вы можете заходить на моего telegram бота, чтобы посмотреть результат работы, после каждого урока: http://t.me/pythonte1egram_bot.

0
Комментарии
-3 комментариев
Раскрывать всегда