Я пытаюсь заставить этот калькулятор работать, но он автоматически отправляет сообщение, пожалуйста, укажите действительный номер когда я запускаю команду /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()
Я пытаюсь заставить это работать
@Sreyas Я хочу, чтобы он отправил команду, а затем пользователь отправил числовой текст
Я все еще очень новичок в этом голом со мной
Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы найти адекватный ответ.
Проблема с вашим кодом была:
Вы пытались преобразовать само командное сообщение в целое число.
Ваш бот обработал только команду /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.
Как вы взаимодействуете со своим ботом? message.text содержит все ваше сообщение, которое вы отправляете, вы можете проанализировать его аргументы.