Найти в Дзене
This is Python

Python, telegram-bot с калькулятором

Думаю, что многие сталкивались с одной проблемой. Заключается она в том, что Вы хотели научиться писать телеграм-ботов, однако в интернете не так много ресурсов. На самом деле, ресурсов немало, если их поискать. В основном большинство авторов ограничиваются эхо-ботом, толком ничего не объясняя. В этой статье я напишу бота, который работает как калькулятор. Также я объясню все, что использовал. Код как обычно внизу. Для начала нужно установить библиотеку PyTelegramBotApi и импортировать её. Затем нужно зайти в телеграм, найти бота BotFather и с помощью команды /newbot создать бота. Сразу сохраните токен, полученный Вами. Зайдя обратно в проект, создайте переменную, в которой Вам нужно ввести команду telebot.Telebot(токен). Переменная будет называться как в документации - bot. Переменная нужна, чтобы можно было вызывать функции из библиотеки. Теперь Вам нужно создать обработчик сообщений - @bot.message_handler(). По сути, обработчики заменяют условные операторы, тем самым упрощая написан

Думаю, что многие сталкивались с одной проблемой. Заключается она в том, что Вы хотели научиться писать телеграм-ботов, однако в интернете не так много ресурсов. На самом деле, ресурсов немало, если их поискать. В основном большинство авторов ограничиваются эхо-ботом, толком ничего не объясняя. В этой статье я напишу бота, который работает как калькулятор. Также я объясню все, что использовал. Код как обычно внизу.

Для начала нужно установить библиотеку PyTelegramBotApi и импортировать её. Затем нужно зайти в телеграм, найти бота BotFather и с помощью команды /newbot создать бота. Сразу сохраните токен, полученный Вами. Зайдя обратно в проект, создайте переменную, в которой Вам нужно ввести команду telebot.Telebot(токен). Переменная будет называться как в документации - bot. Переменная нужна, чтобы можно было вызывать функции из библиотеки. Теперь Вам нужно создать обработчик сообщений - @bot.message_handler(). По сути, обработчики заменяют условные операторы, тем самым упрощая написание кода. Внутри обработчика нужно создать функцию (я назову её start), которая принимает 1 аргумент. Обычно аргумент называют message, однако подойдут и другие названия. Функция должна поприветствовать пользователя после того, как он введет команду /start. Для этого в параметрах обработчика создайте именованный аргумент сommands. Это обязательно должен быть список. Этот аргумент работает так: если сообщение соответствует хотя бы 1 элементу списка, то активируй функцию внутри обработчика. Теперь вернемся к ней. Чтобы вывести сообщение, существует функция send_message(куда отправить, что отправить). 1 аргументом указывается id, если нужно отправить в чат с ботом, нужно указать message.chat.id (при условии, что в аргументах функции start указан message), 2 аргументом указывается, что выводить. Это может быть строка, переменная и другое. Теперь нужно создать ещё 1 обработчик сообщений, а в параметрах нужно указать func. Этот аргумент может принимать обычную функцию (def) или анонимную (lambda). Он работает так: если сообщение соответствует значению функции, то активируй её. Я напишу функцию с помощью инструкции lambda. Она должна принимать 1 аргумент (message). Внутри функции нужно указать message.text, преобразованный в список методом split(), также элементы списка нужно посчитать при помощи функции len(). Результат должен быть равен 3:

lambda message: len(message.text.split()) == 3

Так как калькулятор будет простейшим, он будет состоять из 3 частей:

число - знак - число.

Теперь нам нужно написать калькулятор, а сделать это можно достаточно быстро. В переменную mes нужно сохранить текст сообщения, преобразованный в список методом split(). Затем нужно создать словарь (я назову его vyr), в качестве ключей будут выступать знаки операций с числами (+, -, /, *). Все они должны быть строковыми. Например:

"+" - правильно;

+ - неправильно.

В качестве значений должны выступать действия с mes[0] и mes[2], преобразованных в int. Вот пример:

"*": int(mes[0]) * int(mes[2]).

Затем с помощью функции send_message() нужно вывести значения нужного ключа. Это можно сделать так:

bot.send_message(message.chat.id, vyr[mes[1]]).

Суть заключается в том, что mes[1] - это знак операции над числом, а они выступают в роли ключей словаря, и если вызвать их, выведется значение, а в роли значения выступают выражения. Я ни разу не встречал подобных калькуляторов в интернете, поэтому с уверенностью могу сказать, что сам придумал этот код. Не забудьте последней строкой указать bot.infinity_polling(). Он не принимает аргументов и нужен для того, чтобы бот продолжал работу в течение длительного времени.

-2

-3

Надеюсь, что Вам понравилась данная статья.