Задать вопрос
Ответы пользователя по тегу TeleBot
  • Как правильно встроить FSM в телеграм бот на библиотеке telebot?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. storage - объявили, но не используете, надо:
    bot = telebot.TeleBot('TOKEN', state_storage=storage)

    2. Состояние не меняете.
    3. В интернете логичнее всего смотреть примеры в репе создателей: custom_states.
    4. Код:
    import telebot
    from telebot import types
    from telebot.states import State, StatesGroup
    from telebot.states.sync.context import StateContext
    from telebot.states.sync.middleware import StateMiddleware
    from telebot.storage import StateMemoryStorage
    from telebot.types import ReplyParameters
    
    
    storage = StateMemoryStorage()
    bot = telebot.TeleBot('TOKEN', state_storage=storage, use_class_middlewares=True)
    
    class MyStates(StatesGroup):
        START = State()
        US = State()
        SUP = State()
    
    
    @bot.message_handler(commands=["start"])
    def start(message: types.Message, state: StateContext):
        state.set(MyStates.START)
        bot.send_message(
            message.chat.id,
            f'Привет, {message.from_user.first_name}!\n/sup - оформить подписку\n/us - информация о нас',
            reply_parameters=ReplyParameters(message_id=message.message_id),
        )
    
    @bot.message_handler(commands=["us"])
    def us(message: types.Message, state: StateContext):
        state.set(MyStates.US)
        bot.send_message(
            message.chat.id,
            'Информация о нас',
            reply_parameters=ReplyParameters(message_id=message.message_id),
        )
    
    @bot.message_handler(commands=["sup"])
    def sup(message: types.Message, state: StateContext):
        state.set(MyStates.SUP)
        bot.send_message(
            message.chat.id,
            'Оформить подписку',
            reply_parameters=ReplyParameters(message_id=message.message_id),
        )
    
    
    if __name__ == '__main__':
        print('start')
        bot.setup_middleware(StateMiddleware(bot))
        bot.infinity_polling()
    Ответ написан
    Комментировать
  • Почему не работает код python для телеграмм бота?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если используете telebot, то не логичнее ли его и импортировать?
    import telebot

    Если по какой-то неведомой причине имя таки должно быть telegram, то импортируйте так:
    import telebot as telegram

    З.Ы. Есть ощущение, что вы запутались в библиотеках, пишите о telebot'e (и используете его тег), а синтаксис от python-telegram-bot. И в интерпретаторах: используете venv, а установили пакеты в global (если судить по диалогу с Balavnik).
    Ответ написан
    Комментировать
  • Обработка ошибки в telebot, как сделать обработку на ошибку 409?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Так?
    Написать класс, где будете обрабатывать ошибку и передать его в exception_handler при инициализации бота.
    import telebot
    
    
    class ExceptionHandler(telebot.ExceptionHandler):
        def handle(self, exception):
            print('Ооооошибка 409!:', exception)
            return True
    
    bot = telebot.TeleBot('YOUR_API_TOKEN', exception_handler=ExceptionHandler())
    bot.polling(none_stop=True)
    Ответ написан
    1 комментарий
  • Не выходит сделать кликабельный номер телефона?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Чтобы кликабельный для звонка - вряд ли.
    Кликабельный для копирования - да.
    ...
                text = '''Номер телефону: `+1111111`
    Сайт: auto-repair-shop-10715.business.site
    Робочий час: Понеділок - Субота / 08:00 - 18:00'''
                bot.edit_message_text(chat_id=call.message.chat.id,
                                      message_id=call.message.id,
                                      text=text,
                                      reply_markup=ans, parse_mode='MARKDOWN')
    ...


    65e2549a0af6b313680789.png
    Ответ написан
    Комментировать