@zven_rm

Бот для телеги, ошибка преобразования типов, как исправить?

решил попробовать делать ботов, новичок в этом деле, сделал вот такого бота, но на моменте нажатия кнопки происходит ошибка, связанная с типом int из первого условия if. Помогите исправить, не понимаю почему он именно туда постоянно ссылается.
import telebot
bot = telebot.TeleBot('11')
keyboard1 = telebot.types.ReplyKeyboardMarkup()
keyboard1.row('Сашуля', 'Петруля', 'eee')
photo=open('C:\\Users\\Egor\\Desktop\\bQIXVNvv9fw.jpg', 'rb')
ilya=open('C:\\Users\\Egor\\Desktop\\nzjX08t3ggw.jpg', 'rb')
ya=open('C:\\Users\\Egor\\Desktop\\o4opSBv5cig.jpg', 'rb')
mem=open('C:\\Users\\Egor\\Desktop\\jW2ITeKS3mA.jpg', 'rb')

@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, 'так')
    bot.send_message(message.chat.id, 'сколько лет тебе ?')

@bot.message_handler(content_types=['text'])
def send_text(message):
    if int(message.text)<18:
        bot.send_message(message.chat.id, 'no')
        bot.send_message(message.chat.id, 'повторяю еще раз, сколько лет ?')
    elif int(message.text)>=18:
        bot.send_message(message.chat.id, 'уговорил')
        bot.send_message(message.chat.id, 'вот тебе мем')
        bot.send_photo(message.chat.id, mem)
        bot.send_message(message.chat.id, 'ты кто ?', reply_markup=keyboard1) 
        if str(message.text.lower()) == 'Сашуля':
            bot.send_photo(message.chat.id, photo)
        elif str(message.text.lower()) == 'Петруля':
            bot.send_photo(message.chat.id, ilya)
        elif str(message.text.lower()) == 'eee':
            bot.send_photo(message.chat.id, ya) 
bot.polling()
5fbfb5feb9b15670077338.png
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 3
mallo_c
@mallo_c
Зачем я изучил VBS???
Я вижу, вы отправили боту не число
Проверяйте, число или нет, и только потом преобразовывайте
Добавьте валидацию
Ответ написан
Комментировать
@twistfire92
Python backend developer
Прежде чем делать ботов, разберитесь с основами языка да и вообще программирования в целом. Вы должны понимать что такое типы данных. Что есть строки и есть числа. Что 18 и "18" - это разные вещи и сравнивать их нельзя.
Ответ написан
@Cominta
Начинающий программист
В message.text есть символы, которые (буквы) которые в int нельзя преобразовать
Выы отправили ему не число
Можете попробовать обернуть это все в try except
Кстати, у вас там еще ошибка в этих условиях:
if str(message.text.lower()) == 'Сашуля':
        bot.send_photo(message.chat.id, photo)
elif str(message.text.lower()) == 'Петруля':
        bot.send_photo(message.chat.id, ilya)

У вас message.text.lower() вернет с нижним регистром, а у вас сравнивается с текстом в котором есть верхний регистр (даже если вы напишете Петруля, вернется "петруля" и оно никогда не будет равняться "Петруля"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект