Как хранить данные бота прямо в Телеграме

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Постановка задачи

Как известно, бот это программа на компьютере, которая взаимодействует с https://api.telegram.org и притворяется человеком. Разумеется, у неё есть данные в своей собственной базе данных или типа того. Если этот компьютер внезапно исчезнет, то хотелось бы, чтобы верные друзья в другом месте и с другим компьютером «засунули флешку» и запустили этого же бота из другого места. И, разумеется, для этого нужно передать актуальные данные из старого места в новое. Разумеется, для этого существуют какие-нибудь проверенные временем дорогостоящие решения, но это всё можно организовать прямо через Телеграм. И не спрашивайте, зачем это нужно лично вам.

Файлы

Все знают, что у файлов, посланных в Телеграм, есть file_id, по которому их можно закачать обратно в компьютер посредством getFile. Итак, делаем регулярные копии данных в файл, посылаем эти файлы куда угодно, а в решающий момент наши верные друзья запустят новый экземпляр бота, он сделает getFile и продолжит работу со старыми данными. Проблема в том, что у разных файлов этот самый file_id разный, и его надо как-то передать в новый экземпляр бота.

Первый способ. Через сообщения

Команда sendMessage не только посылает сообщение. Она еще и возвращает номер этого сообщения. И по паре чисел (Id чата, номер сообщения) это самое сообщение можно регулярно изменять (например, записывая туда file_id резервной копии данных) посредством editMessageText, и потом прочитать из нового экземпляра бота посредством forvardMessage (да, эта команда ещё и возвращает текст передаваемого сообщения). Так вот, эта пара (Id чата, номер сообщения) не меняется, и это значит, что можно сначала запустить бота, он сделает сообщения (в какой-нибудь приватный канал) для хранения file_id резервной копии и покажет пару чисел (Id чата, номер сообщения). Затем следует вписать эту пару чисел в «бот на флешке» и раздать её своим верным друзьям. Это вполне работающий метод, но вот это вот: «сначала запустить потом изменить код бота» – несколько неудобно. Но есть и

Второй способ. Через меню

Как известно, у бота есть меню. Когда-то давно его можно было делать только через @BotFather, но, потом появилась setMyCommands, чтобы установить меню прямо из бота, и getMyCommands, чтобы прочитать то, что было в это самое меню установлено. Итак: бот делает резервную копию и записывает file_id этой копии в какой-нибудь приватный канал. Потом узнает пару чисел (Id чата, номер сообщения) и записывает их в меню в виде как бы пояснения к команде.

При запуске бота с другого компьютера, бот сначала сделает getMyCommands, узнает ту самую пару чисел, сделает forvardMessage, узнает file_id, скачает данные, и как будто ничего и не случилось.

Понятно, что эта пара чисел будет болтаться перед глазами всех пользователей и вызывать ненужные вопросы, но в июне 2021 года у setMyCommand появилось поле language_code и возможность делать разные меню для разных пользователей с разным языком в системных настройках. Экспериментально установлено, что в качестве языкового кода можно указывать несуществующие языки типа «xy» и это значит, что пользователи ничего лишнего не увидят и вопросов не зададут.

Более того. Можно организовать автозапуск запасных ботов и обойтись без верных друзей. Итак: Основной бот запущен в рабочем режиме и, кроме прочего, регулярно пишет что-нибудь меняющееся в меню или в сообщение с известным номером. Например, текущее время. Запасные боты (запущенные в других местах) находятся в спящем режиме, они ничего не делают но регулярно (но через случайные промежутки времени) смотрят это «текущее время». Если они замечают, что оно давно не обновлялось, то первый обнаруживший это бот запустится в рабочем режиме. И как будто ничего и не случилось...

И не спрашивайте зачем это может понадобиться лично вам.

Источник: https://habr.com/ru/post/711476/


Интересные статьи

Интересные статьи

Привет, Хабр! Недавно мы рассказали о текущей ситуации с доступностью источников бесперебойного питания и возможных альтернативах продукции ушедших или приостановивших поставки вендоров. А в этом пост...
Сегодня хочется поговорить о технической поддержке, а точнее о тонкостях, которые обеспечивают ее работу. Недавно мы закончили проект по организации базы знаний, которая помогает выполнять свою работу...
Задача была такова: Есть общая папка с изображениями, к каждому из которых проставлены ключевые слова (определяющие конкретного человека/организацию). Необходимо получать перечень изображений с опреде...
Наша биг дата проанализировала Telegram-чаты, форумы и разговоры в кулуарах IT-мероприятий и пометила объектные хранилища как инструмент, который ещё не все осмеливаются использовать в своих проекта...
Доброго времени суток, друзья! Хочу поделиться с вами некоторыми наблюдениями относительно того, как работает React, а именно: предположениями о том, почему хуки нельзя использоват...