Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в написании Телеграм бота на Python, не найдено имя message (код прилагается)

Zigerson Профи (618), закрыт 3 года назад
Пишу телеграм бота по урокам на хабре, но возникли некоторые сложности с запуском кода на сервере.
выдаёт следующую ошибку:
File "A:\Users\Чип и Дейл\Desktop\telegram\test_bot.py", line 43, in
bot.send_message(message.from_user.id, text = question,reply_markup = keyboard)
NameError: name 'message' is not defined

import telebot
import configs

from telebot import types

bot = telebot.TeleBot(configs.mytoken)

name = "";
surname = "";
age = 0;

@bot.message_handler(content_types=['text'])
def start(message):
bot.send_message(message.from_user.id, 'как тебя зовут?')
bot.resister_next_step_handler(message, get_name);

def get_name(message):
global name;
name = message.text;
bot.send_message(message.from_user.id, 'какая у тебя фамилия?');
bot.register_next_step_handler(message, get_surname);

def get_surname(message):
global surname;
surname - message.text;
bot.send_message('Сколько тебе лет?');
bot.register_next_step_handler(message, get_age);

def get_age(message):
global age;
while age == 0:
try:
age = int(message.text)
except Exception:
bot.send_message(message.from_user.id, 'цифрами, пожалуйста')
keyboard = types.InlineKeyboardMarkup(); #Наша клавиаткра
key_yes = types.InlineKeyboardButton(text='Да',callback_data= 'yes'); #кнопка «Да»
keyboard.add(key_yes); #"Добавляем кнопку в клавиатуру"
key_no = types.InlineKeyboardButton(text= "Нет", callback_data= 'no');
keyboard.add(key_no);
question = 'Тебе' +str(age)+ 'лет, тебя зовут' +name+ ''+surname+ '?'
bot.send_message(message.from_user.id, text = question,reply_markup = keyboard)
bot.send_message(message.from_user.id, "тебе" +str(age)+ 'лет, тебя зовут ' +name+ '' +surname+ '?')

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
if call.data == 'yes': #типо callback_dataы
bot.send_message(call_message.chat.id, "Запомню:)");
elif call.data == 'no':
bot.send_message(message.from_user.id, text = question,reply_markup = keyboard)
#переспрашиваем

bot.polling(none_stop = True, interval = 0)

Вроде бы message это функция а не одна из глобальных переменных, в чём подвох, где я затупил кто подскажет?)

Дополнен 3 года назад
n̉ͯ̀͊̀́̈͆̾̈ͩͧ̇̍̑ͧ҉̶̵̢̙̠͙͙̙̯̥̤͔͖̯̥͝, File "A:\Users\Чип и Дейл\Desktop\telegram\bot.py", line 58, in get_surname
bot.send_message('Сколько тебе лет?');
TypeError: TeleBot.send_message() missing 1 required positional argument: 'text'

Запустил я его код, всё работает но теперь другая ошибка вылезла,
где то пропущен аргумент, text. Я изначально его в content_types указывал. Теперь куда его вставлять ?
Лучший ответ
n̉ͯ̀͊̀́̈͆̾̈ͩͧ̇̍̑ͧ҉̶̵̢̙̠͙͙̙̯̥̤͔͖̯̥͝ Мудрец (17257) 3 года назад
Имя "сообщение" не определено. Ищи ошибку
Zigerson Профи (618) 3 года назад
я поэтому и прошу помочь мне
n̉ͯ̀͊̀́̈͆̾̈ͩͧ̇̍̑ͧ҉̶̵̢̙̠͙͙̙̯̥̤͔͖̯̥͝ Мудрец (17257) Zigerson, если ты пишешь бота по урокам открой код учителя и сравни со своим. Так и найдёшь ошибку.
Остальные ответы
Άηϑρέΰ ҂ Искусственный Интеллект (180096) 3 года назад
в функции callback_worker идет обращение к несуществующей переменной
Анар Дадашов Ученик (181) 3 года назад
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
if call.data == 'yes': #типо callback_dataы
bot.send_message(call_message.chat.id, "Запомню:)");
elif call.data == 'no':
======>bot.send_message(message.from_user.id, text = question,reply_markup = keyboard)

Обращение к несуществуещей переменной 'message'. Ты тогда уж в callback_worker передавай в качестве параметра message, но это не лучший вариант.
Zigerson Профи (618) 3 года назад
но разве bot.send_message() это не обращение бота на ваше сообщение ?
Если нет то как я могу объявить переменную которую применят бот в качестве аргумента ?
Zigerson, в переменную нужно перемести константу соответствующего типа, затем объявить фукцию для перехода в спящий режим
Арслан Сарваров Ученик (224) 1 год назад
Для упрощения чтения кода используй f строки, просто поменяй
 question = f'Тебе{age} лет, тебя зовут {name} {surname} ' 
bot.send_message(message.from_user.id, text = question,reply_markup = keyboard)
bot.send_message(message.from_user.id, f"тебе {age} лет, тебя зовут {name} {surname}?')
Похожие вопросы