есть программа, которая спрашивает у человека его имя, но когда пишу любое слово, то мне выдают вместо имени название бота и тд

def main(message):
  global hi
  markup = telebot.types.InlineKeyboardMarkup()
  hi = bot.send_message(message.from_user.id, text="напиши своё имя")
  bot.register_next_step_handler(hi, privet)
def privet(message):
  bot.send_message(message.from_user.id, text="привет, {hi}!".format (hi))


Ответы (2 шт):

Автор решения: Snowking

Вот код, используйте его:

message = bot.send_message(message.chat.id, "Введите сообщение")
bot.register_next_step_handler(message, reply_to_user)
def reply_to_user(message):
    bot.send_message(message.chat.id, message.text)
→ Ссылка
Автор решения: n1tr0xs

Функция bot.send_message возвращает объект Message, а не текст ответа пользователя. Чтобы достать текст нужно обратиться к свойству text.
Вот так это будет выглядеть:

def main(message):
  #global hi # <--- эту строчку убираем, она больше не понадобиться
  markup = telebot.types.InlineKeyboardMarkup()
  response = bot.send_message(message.from_user.id, text="напиши своё имя")
  bot.register_next_step_handler(response, privet)

def privet(message):
  text = message.text # вот то, что вам написал пользователь
  # используем f-строки, они предпочтительнее чем format
  bot.send_message(message.from_user.id, text=f"привет, {text}!") 
→ Ссылка