Задать вопрос
@Becoming_Java_Developer
12 летний школьник , мечта стать Java Senior-ом

Проблемы с запуском бота телеграм на Python, что делать?

Здраствуйте , сразу извиняюсь за глупый вопрос . Я недавно начал также создавать телеграмм ботов на PytelegrambotAPI
, и вот столкнулся с ошибкой . Я создал простого бота с функциями , пишу ему скрипт на запуск , а после команды /start бот ничего не отправляет и не реагирует . Вот код , там есть комментарии
#_______________________________________________________________________________________________________________________
#imported libraries

from email import message
import telebot
from telebot import types as type
from random import randrange

#------------------------------------

#random_flowers = randrange(1 , 3)
#sport_random = randrange(1 , 3)
#cr = randrange(1 , 3)

#------------------------------------

#_____________________________________________________________________________________________________________________
#markup script
bot = telebot.TeleBot(*Токен скрыт , но он есть*)

bot.message_handler(commands=['Start'])
markup = type.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = type.KeyboardButton("Любимый спорт")
item2 = type.KeyboardButton("любимые Цветы")
item3 = type.KeyboardButton("Мой создатель")
item4 = type.KeyboardButton("Любимая машина")
item5 = type.KeyboardButton("Выход")
markup.add(item1, item2, item3, item4)
#_______________________________________________________________________________________________________________________
#functions

def sport(sport_random):
    if sport_random == 1:
        bot.send_message(message.chat.id, "Мне нравится баскетбол . Особенно обувь в баскетболе)")

    elif sport_random == 2:
        bot.send_message(message.chat.id, "Футбол - моя жизнь . Обожаю его)")

    elif sport_random == 3:
        bot.send_message(message.chat.id, "Волейбольчик топчик)")





def flowers(random_flowers):
    if random_flowers == 1:
        bot.send_message(message.chat.id, "Ромашки такие красивые , жаль что я бот и не могу ощутить их запах(")

    elif random_flowers == 2:
        bot.send_message(message.chat.id, "Розы , красота , обожаю их)))")
    elif random_flowers == 3:
        bot.send_message(message.chat.id, "Тюльпанчики красавчики , ахах)")





def car(cr):
    if cr == 1:
        bot.send_message(message.chat.id, " Lamborghini , машина для богини)")
    elif cr == 2:
        bot.send_message(message.chat.id, "Ferrari обожаю больше всех")

    elif cr == 3:
        bot.send_message(message.chat.id, "Как бы странно не звучало , но мне нравится Лада приора)")



#______________________________________________________________________________________________
#main_script

bot.send_message(message.chat.id, f"Привет , я бот с интеллектом . У меня также есть свои интересы , которые ты можешь узнать , и после кнопки \"Выход\" я обновляю интересы . Пока что так , но скоро будет много интересного)))", reply_markup=markup)
if message.type == 'private':
    if message.text == "Любимый спорт":
        sport_random = randrange(1 , 3)
        sport(sport_random)
    elif message.text == "любимые Цветы":
        random_flowers = randrange(1 , 3)
        flowers(random_flowers)
    elif message.text == "Мой создатель":
        bot.send_message(message.chat.id, "Мой создатель Тимур - простой 12-летний школьник , пытающийся занятся программированием. Если что пишите @int3llect")
    elif message.text == "Любимая машина":
        cr = randrange(1 , 3)
        car(cr)
    elif message.text == "Выход":
        bot.send_message("Успешно выйдено.")

    else:
        bot.send_message(message.chat.id, "Извини , функция чат бота пока недоступна , но летом Тимур будет над ней работать , а пока наслаждайся тем что есть)")



#___________________________________________________________________________________________________
#polling

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

Заранее , извиняюсь за глупый вопрос:-/
  • Вопрос задан
  • 787 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 3
shurshur
@shurshur
Сисадмин, просто сисадмин...
Здесь много неправильно, и не странно, что это не работает.

На первом уровне вложенности основной код, который должен делать 3 вещи:

1. Импортировать модули.

2. Создавать объект класса TeleBot.

3. Вызывать от него polling.

Что делает polling? Это цикл, который дёргает у Bot API метод getUpdates и получает время от времени новые обновления от Telegram. Для каждого он вызывает обработчики (handler). По умолчанию нет ни одного handler, и простейший бот без них не делает ничего - только скачивает и сразу выбрасывает получаемые сообщения.

Далее надо сделать обработчики. Они представляют из себя обычные функции. Например, обработчик сообщения принимает объект класса Message, в котором все данные по сообщению: отправитель, текст, время отправки, id чата итд.

Чтобы бот знал, что вот эта конкретная функция является обработчиком такого-то события с такими-то условиями, надо использовать декораторы. Например:

@bot.message_handler(commands=['start','menu'])
def start_message(message):
  # в этом обработчике мы можем обработать команду /start или /menu,
  # при этом можно брать из message данные о сообщении:
  # message.text - текст
  # message.from_user - объект класса User с данными отправителя
  # message.chat - объект класса Chat с данными о чате (группа или приват)
  ... тут нужные действия ...


Использовать декоратор без @ и последующего описания функции бессмысленно - он просто ничего не будет делать (потому что декоратор - это специально устроенный класс, вызов bot.message_handler создаёт экземпляр этого класса, от которого потом вызывается специальный метод, а тут этого не происходит).

Вызывать на первом уровне вложенности bot.send_message таки возможно, но... но тут в него передаётся, например, message.chat.id - а что такое message? Этой переменной в скрипте нет. И откуда бы она взялась, если сообщение получается внутри вызова bot.polling и должно передаваться обработчику, который нужно было бы оформить как функцию с декоратором? В коде нет ни одного такого. Да и переменная message будет актуальна только внутри этого обработчика, снаружи функции она не будет доступна.

В общем, это никак не может работать.

Плохая идея начинать изучения языка с ботов, области, в которой уже нужно обладать определённым уровнем познаний. Начинать имеет смысл с азов. Делать сначала простейшие задания (вида "попросить пользователя ввести два числа и вывести их сумму"), освоить циклы и функции, работу с файлами и строками, ну и всё такое. Затем, вернувшись к теме ботов, уже будешь делать всё не вслепую, а хоть как-то понимая происходящее.

Представь себе, что ты бы купил автомобиль, и не смог бы понять, как его завести. Начал бы тыкать куда попало. Например, нашёл нипель на колесе - подёргал. Дворник крутится, если приложить усилия (ой, сломал, теперь не будет ездить?). Сзади труба торчил - к ней надо водопроводный шланг подвести? Вот примерно так сейчас ты делаешь бота. Даже если тебе подскажут, что изменить, ты всё равно не научишься программировать и не будешь понимать, что сделал.
Ответ написан
Комментировать
@treketerer
Не уверен, давно с этой библиотекой работал, но на первый взгляд @bot.message_handler(commands=['Start'])
start должно вроде-бы писаться с маленькой буквы. Вот так: @bot.message_handler(commands=['start'])
Но это только при первом осмотре, попробуйте, может, вся проблема всего лишь этом. Но все же думаю всё сложнее...
Ответ написан
@Dzhigit
Начинающий прогер
Или я слепой, или это реальность, но декораторы у тебя начинаются с @?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы