• Как сделать перелистывание в телеграм боте?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Определяете размер текста в одном сообщении, пусть будет 10 символов. Предположим, текст лежит в переменной text. Строки поддерживают срезы, ими и пользуемся. В первом сообщении отправляются первые 10 символов:
    text[:10]. К сообщению цепляются две инлайн кнопки, ну для первой то страницы можно и одну просто. В callback_data можно использовать любое удобное значение, главное чтобы было понятно какой срез взять. Можно просто цифры. Для первой страницы в callback_data будет 2. В обработчике нажатия кнопки вызываем метод редактирования Сообщения, в качестве текста передаём новый срез, где в срез от идёт значение чанк*цифра колбэк даты, срез ДО чанк+1*цифра, к сообщению так же редактируется клавиатура, где цифра в кнопке предыдущей страницы становится равной текущей, а в следующей +1. Короче просто срезы и всё

    @bot.callback_query_handler(func=lambda call: True)
    def callback_query(call):
    
        page = int(call.data)
    
        f = (page-1)*chunk
        s = page*chunk
    
        kb = types.InlineKeyboardMarkup()
        kb.add(types.InlineKeyboardButton('<', callback_data=page), types.InlineKeyboardButton('>', callback_data=page+1))
    
    
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, text=text[f:s], reply_markup=kb)
    Ответ написан
    1 комментарий
  • Как сделать автоматическое поддержание работы скрипта Python на Ubuntu?

    Victor_M
    @Victor_M
    Системный аналитик
    Запустить скрипт в качестве Сервиса.
    У меня сделано так:
    1. Пользователь-владелец домашнего каталога скрипта - telebot, рут-права не обязательны для работы
    2. Создать файл telebot.service в каталог /etc/systemd/system

    Содержимое файла:
    [Unit]
    Description=Service for Telegram bot main. From user telebot
    After=network.target
    # Для запуска сервиса нужен запущенный сервис MySQL (т.к. работаем с базой данных, расположенной на этом же сервере)
    After=mysql.service
    Requires=mysql.service
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    # Даем знать systemd, что этот сервис представляет из себя лишь 1 процесс.
    # Ожидается, что процесс, настроенный с помощью ExecStart= является основным процессом службы
    Type=simple
    # Устанавливаем рабочую дирректорию службы
    WorkingDirectory=/home/telebot/bot_prod/
    # Указаываем пользователя и группу для работы службы
    User=telebot
    Group=telebot
    # Должна ли служба считаться активной, даже если все ее процессы завершены
    RemainAfterExit=no
    # Выполнить эту команду при запуске сервиса.
    ExecStart=python3 /home/telebot/bot_prod/bot.py
    # Говорим, что нужно перезапускать сервис, если вдруг он умер
    Restart=on-failure
    # Таймаут на включение и выключение
    TimeoutSec=60
    Ответ написан
    Комментировать