Ответы пользователя по тегу Telegram
  • Не работает Telegram бот на Python?

    Fallervood
    @Fallervood
    Обратите внимание на ошибку:

    AttributeError: 'TeleBot' object has no attribute 'send'

    В ней сказано, что объект 'TeleBot' не имеет атрибута (метода) 'send'.
    Соответственно ошибка в строчках, где вы пишите bot.send.msg

    Правильная запись:
    bot.send_message

    Учитесь читать ошибки! Удачной разработки!
    Ответ написан
    Комментировать
  • Python (aiogram): Как сделать несколько сменяющихся страниц inline-кнопок?

    Fallervood
    @Fallervood
    На aiogram не подскажу конкретного решения. Но как бы сделал я на примере pytelegrambotapi.
    Думаю структура будет понятна, и сможешь сделать на aiogram.

    Словарь хранящий в себе user_id : Страница на которой находиться
    user_page = dict
    Список inline кнопок
    buttons = list

    Для удобства, отдельная функция для клавиатуры, куда передаем user_id
    def inline_keyboard(user_id):
        markup = InlineKeyboardMarkup()
        # Достаем страницу. Будет идти с 0
        page = user_page[user_id]
        # Кол-во кнопок которые будем менять, по сути индекс. 
        step = 2
        for i in range(page, page+2):
            markup.add(buttons[i+]
        btn_next = InlineKeyboardButton(text='>', callback_data = 'next')
        btn_back = InlineKeyboardButton(text='<', callback_data = 'back')
        return markup


    Соответственно в обработке колбеков на next прибавляем к странице step, на back отнимаем.
    После, редактируем уже существующее сообщение.
    Пишем проверку, чтобы пользователь не мог выйти за рамки массива.

    Вызываем где нужно
    reply_markup = inline_keyboard(message.user_id)

    Должно быть все просто. Удачи!
    Ответ написан
    Комментировать
  • Как из google-sheets отправлять сообщение в Телеграм после обновления строки в таблице?

    Fallervood
    @Fallervood
    Вам нужно написать scheduled скрипт.
    Скрипт - который будет обновляться в определенное время.

    В принципе первый комментатор прав, это будет самый логичный вариант, без каких либо затрат. Не вижу проблемы хранить эту информацию, можно просто записывать массив из таблицы в txt файл и сравнивать его в определенные интервалы времени.

    Для этого можно использовать библиотеку, которая так и называется schedule.
    Документация.

    На запись такого скрипта уйдет 2 минуты, а Вы сохраните нервные клетки :)

    P. S. Отслеживайте трафик скрипта, не перегрузите сервер
    Ответ написан
    Комментировать
  • Pydroid: Телеграм бот отключается через 2 минуты, что можно сделать?

    Fallervood
    @Fallervood
    Хероку не дает бесперебойный хост, в прочем как и любой хостинг на бесплатной основе. Как правило, даже если какие-то ресурсы выделяются бесплатно - хостинг оставляет за собой право сбрасывать процессы, которые "нагружают" сервер и стоят на бесплатной основе.

    Лично я, в разработке ботов использую этот хостинг (ТЫК).
    Очень простой в использовании, намного легче деплоинг и отличный интрерфейс, на фоне Хероку

    Возможно проблема вообще не в хостинге, а в polling. Как правило, в конце скрипта бота должен быть обработчик бота, что-то вроде: bot.polling(None_stop=True)
    Информацию подробнее можно найти в официальной документации, в разделе getUpdates.

    Удачной разработки!
    Ответ написан
    Комментировать
  • Почему Телеграм бот при нажатии на кнопки выдаёт сообщение об ошибке?

    Fallervood
    @Fallervood
    В декораторе Вы указываете, что он будет срабатывать на любой текст поступающий боту. Текст Вы отправляете через кнопки. Кроме того, функция start под точно таким же декоратором.

    Следует заменить на :
    @bot.message_handler(commands=['start'])

    Указал, ничего не изменяя
    import telebot
    from telebot import types
    
    bot = telebot.TeleBot('ТУТ ТОКЕН')
    
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
    butt1 = types.KeyboardButton('ЗАРАБОТАТЬ')
    butt2 = types.KeyboardButton('КАНАЛ')
    markup.add(butt1, butt2)
    
    markup2 = types.ReplyKeyboardMarkup(resize_keyboard = True)
    butt1 = types.KeyboardButton('Дальше')
    butt2 = types.KeyboardButton('Назад')
    markup2.add(butt1, butt2)
    
    @bot.message_handler(content_types = ['text']) # Здесь вы указываете декоратор
    def welcome(message):
        bot.send_message(message.chat.id, 'Привет епта ', reply_markup = markup)
    
    @bot.message_handler(content_types= ['text']) # Здесь заменить
    def start(message):
        bot.send_message(message.chat.id, 'Ага', reply_markup = markup)
        if message.text == 'ЗАРАБОТАТЬ':
            bot.send_message(message.chat.id, 'Что-бы заработать подними жопу', reply_markup = markup2)
        elif message.text =='КАНАЛ':
            bot.send_message(message.chat.id, 'Это наш канал', reply_markup = markup2)
    
    def lala(message):
        if message.text == 'Дальше':
            bot.send_message(message.chat.id, 'Ага ага')
        elif message.text == 'Назад':
            bot.send_message(message.chat.id, 'Вы вернулись', reply_markup = markup)
    
    bot.polling(none_stop = True)
    Ответ написан
    Комментировать
  • Python telegram Bot - keyboard?

    Fallervood
    @Fallervood
    Функция, которая содержит клавиатуру, должна возвращать markup, а так же не надо передавать аргумент сообщения
    def reply ():
    markup = types.ReplyKeyboardMarkup (resize_keyboard = True)
    button_1 = types.KeyboardButton ('ZAPOMNI')
    button_2 = types.KeyboardButton ('NAPOMNI')
    button_3 = types.KeyboardButton ('IZMENI')
    
    markup.add (button_1, button_2, button_3)
    return markup
    Ответ написан
    Комментировать