Как я могу заставить этот бот-калькулятор телеграмм работать

Я пытаюсь заставить этот калькулятор работать, но он автоматически отправляет сообщение, пожалуйста, укажите действительный номер когда я запускаю команду /multiply, любая помощь будет очень признательна

type here
import telebot

bot = telebot.TeleBot('my token ')

first_number = None
second_number = None

@bot.message_handler(commands=['multiply'])
def multiply(message):
    global first_number
    global second_number
    if first_number is None:
        try:
            first_number = int(message.text)
            bot.send_message(message.chat.id, 'Please provide the second number')
        except ValueError:
            bot.send_message(message.chat.id, 'Please provide a valid number')
    elif second_number is None:
        try:
            second_number = int(message.text)
            result = first_number * second_number
            bot.send_message(message.chat.id, 'Result: {}'.format(result))
            first_number = None
            second_number = None
        except ValueError:
            bot.send_message(message.chat.id, 'Please provide a valid number')

bot.polling()

Я пытаюсь заставить это работать

Как вы взаимодействуете со своим ботом? message.text содержит все ваше сообщение, которое вы отправляете, вы можете проанализировать его аргументы.

Sreyas 17.02.2023 05:53

@Sreyas Я хочу, чтобы он отправил команду, а затем пользователь отправил числовой текст

Anooos 17.02.2023 06:06

Я все еще очень новичок в этом голом со мной

Anooos 17.02.2023 06:07

Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы найти адекватный ответ.

Community 17.02.2023 19:35
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
2
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с вашим кодом была:

  1. Вы пытались преобразовать само командное сообщение в целое число.

  2. Ваш бот обработал только команду /multiply, но вы также хотите также обрабатывать дальнейшие входные сообщения.

Основываясь на том, что вы сказали в комментариях, вы хотели, чтобы бот взаимодействовал таким образом.

User types /multiply
bot asks for first number
user enter valid first number, if not prompt again to enter a valid number
bot asks for second number, if not prompt again to enter a valid number
first number * second number is displayed

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

Итак, вы можете сделать что-то вроде этого:

import telebot

bot = telebot.TeleBot('my token')
first_number = None
second_number = None
ready_to_recieve = False

@bot.message_handler(commands=['multiply'])
def multiply_command_handler(message):
    global ready_to_recieve
    if not ready_to_recieve:
        ready_to_recieve = True
        bot.send_message(message.chat.id, 'Please provide the first number')
    else:
        bot.send_message(message.chat.id, 'You have already requested for a calculation')

@bot.message_handler(func=lambda m: ready_to_recieve)
def multiply(message):
    global ready_to_recieve
    global first_number
    global second_number

    if first_number is None:
        try:
            first_number = int(message.text)
            bot.send_message(message.chat.id, 'Please provide the second number')
        except ValueError:
            bot.send_message(message.chat.id, 'Please provide a valid number')
    elif second_number is None:
        try:
            second_number = int(message.text)
            result = first_number * second_number
            bot.send_message(message.chat.id, 'Result: {}'.format(result))
            first_number = None
            second_number = None
            ready_to_recieve = False
        except ValueError:
            bot.send_message(message.chat.id, 'Please provide a valid number')
bot.polling()

@bot.message_handler(func=lambda m: ready_to_recieve) это будет обработано, только если ready_to_recieve имеет значение True.

Другие вопросы по теме