Что такое код getupdaterect

Содержание

Что такое код getupdaterect

Ситуация такова:
Нужно отследивать изменения всех системы (перерисовку таковых) и что-то изменять в изменяемом окне. При этом (насколько я понимаю) может быть перерисован лишь маленький участок окна, при этом нужно обработать только его.

Делаю так:
1) Прога ставит глобальный hook на WM_PAINT.
2) Если этот hook срабатывает, то DLL выполняет необходимые операции.

Возникают два вопроса:
1) Как определить, что именно изменено в окне?
2) Можно ли это все сделать проще?

Сорри, «всех окон системы» и «в перерисовываемом окне»

GetUpdateRect(hWnd, Rect, false)
GetUpdateRgn(hWnd, Rect, false)

> и что-то изменять в изменяемом окне.


> Можно ли это все сделать проще?

Во-первых, я сильно сомневаюсь, что у тебя получится изменить что-то.
Во-вторых:
«GetUpdateRect returns nonzero if an update region exists, and zero if one does not. This provides a simple and efficient means of determining whether a WM_PAINT message resulted from an invalid area. «

В-третьих, если не секрет, зачем это надо делать ?

Спасибо за ответ!
2 Игорь Шевченко
Не секрет — пишу что-то наподобие WindowBlinds (т.е. программу для изменения интерфейса), поэтому «что-то изменить» на самом деле означает «наложить на окно свою картинку». Обновяемый регион нужен, чтобы не рисовать заново все окно, если достаточно маленькой его части.
P.S. Не пишите, что «одному такое сделать почти нереально». Сам знаю, но я не собираюсь делать эту программу коммерческой, она планируется совсем для других целей (практика в работе с hooks + реферат по информатике).


> Не секрет — пишу что-то наподобие WindowBlinds (т.е. программу
> для изменения интерфейса), поэтому «что-то изменить» на
> самом деле означает «наложить на окно свою картинку».

Что такое код getupdaterect

Функция GetUpdateRect извлекает координаты наименьшего прямоугольника, который полностью включает в себя обновляемый регион заданного окна. GetUpdateRect извлекает прямоугольник в логических координатах. Если нет никакого обновляемого региона, функция GetUpdateRect извлекает пустой прямоугольник (устанавливает все координаты в нуль).

Синтаксис

Параметры

[in] Дескриптор окна, обновляемый регион которого должен извлечься.

[out] Указатель на структуру RECT, которая получает координаты, в единицах устройства, прямоугольника включения.

Приложение может установить эти параметры в NULL, чтобы определить, существует ли обновляемый регион для окна. Если этот параметр — NULL, функция GetUpdateRect возвращает не нуль, если обновляемый регион существует, и нуль, если его нет. Это дает простое и эффективное средство определения, было ли сообщение WM_PAINT из недопустимой области.

[in] Определяет, должен ли фон в обновляемом регионе быть стерт. Если этот параметр — TRUE и обновляемый регион не пуст, функция GetUpdateRect отправляет сообщение WM_ERASEBKGND заданному окну, чтобы стереть фон.

Возвращаемые значения

Если обновляемый регион не пуст, возвращаемое значение — не нуль.

Если нет никакого обновляемого региона, возвращаемое значение — нуль.

Windows NT/2000/XP: Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Замечания

Прямоугольник обновления, найденный функцией BeginPaint, идентичен найденному прямоугольнику GetUpdateRect.

BeginPaint автоматически проверяет достоверность обновляемого региона, так как любой вызов в GetUpdateRect, сделанный немедленно после того как был вызов функции BeginPaint, извлекает пустой обновляемый регион.

Что делать, если Google authenticator всегда выдает неправильные коды

Доброго времени суток.
Я хотел бы рассказать вам о проблемах 2FA аутентификации на устройствах Android 4.4.2 KitKat и о решении, которое в нашем случае прекратило долгие поиски.

Некоторое время назад мы с коллегами решили добавить Двухэтапную аутентификацию (Two factor authentication или для краткости 2FA) для нашего маленького офисного сервера на базе Ubuntu Server.

2FA это дополнительный уровень безопасности и приятное дополнение к уже существующему механизму аутентификации. Кроме обычной пары логин + пароль от пользователя, выполняющего авторизацию, требуется цифровой ключ, который динамически изменяется каждые 30 секунд и генерируется устройством, находящимся во владении пользователя. Для генерации ключа мы использовали Приложение Google authenticator и мобильный телефон на платформе Android. После разовой настройки приложение генерирует коды, имеющие срок жизни в 30 секунд, точно такие же коды генерирует сервер. При аутентификации коды сравниваются.

Так как данные не передаются от сервера и хранятся только на устройстве — этот механизм является более безопасным, чем отправка кодов подтверждения (например, как 3D-secure SMS подтверждение в банковских системах).

Пошаговых инструкций о настройках сервера в сети оказалось неожиданно много. В них все очень просто и доходчиво. Я руководствовался этой статьей.

После настроек сервера установили на телефон Lenovo p780 приложение Google Authenticator, «прочитали» телефоном с монитора QR-code и получили заветные циферки для авторизации. Перед тем как перезагрузить SSH не забывайте сохранить резервные ключи для восстановления доступа.

И вот, все готово к использованию! Перезагружаем SSH, заходим на сервер, указываем пароль, после пароля нас просят предъявить Verification code, переписываем его с телефона и… снова просят указать пароль. Выглядит это так:

ssh user@server.ru
Password:
Verification code:
Password:
Verification code:
Password:
Verification code:
user@server.ru’s password:
Permission denied, please try again.
user@server.ru’s password:
Received disconnect from xx.xxx.xx.xx: 2: Too many authentication failures for user

Вначале думали, что ошибка допущена в настройках, но испробовав несколько мобильных устройств стало очевидно, что коды генерируемые на Android 4.4.2 KitKat приложением Google Authenticator всегда ошибочны.

«Решения», которые удалось найти и их результаты:

  1. Если откатить версию Android, начинает работать корректно. (с этим «решением» работали какое то время, но решили двигаться дальше)
  2. Так как проблема сводится к некорректным часовым поясам — многие решения направлены именно на их исправление. Приложение TimeZone Fixer действительно может помочь с этой проблемой, однако часть приложений после его использования начинает отображать ошибочное время и потребуется чинить их вручную. (решение имеет свои минусы и риски. вся информация о приложении доступна на сайте 4pda)
  3. Подгонять время вручную. Если честно этот способ у нас так и не заработал. Перевести часы вручную и тем самым синхронизировать время на телефоне и сервере. Увы, все попытки ничего не дали, хотя были люди утверждающие, что у них заработало. В любом случае перспектива потерять функцию часов в телефоне не самая приятная.
  4. Синхронизация часов внутри настроек приложения Google authenticator (в нашем случае без результатов, однако были комментарии, что кому то помогло)

Финальное решение проблемы: FreeOTP

«You can used FreeOTP Authenticator(by Red Hat) instead of Google Authenticator until someone fix it.»

Долгое время мне казалось, что рекомендуется использовать другой механизм-аутентификатор, который нужно ставить на сервер вместо Google, поэтому я усердно искал другие решения. Хотелось заставить работать именно Google authenticator, но на самом же деле рекомендуют использовать другое приложение для Android, а серверная часть остается без изменений.

Илон Маск рекомендует:  Iis настройка расширенного формата журнала w3c

Приложение FreeOTP Authenticator от компании Red Hat. После настройки по тому же QR-коду все начало работать без необходимости что то корректировать.

К сожалению я не могу указать вам причину возникновения ошибки в приложении Google authenticator, но надеюсь, что мой печальный опыт поможет сэкономить чье-то время.

Буду рад вашим комментариям! Спасибо за внимание.

Бот для Telegram на Python: от первой строчки кода до запуска на Heroku

В этом руководстве мы разберём процесс написания простого Telegram-бота на Python и его запуска на сервере Heroku. Но сперва давайте выясним, зачем вообще нужны боты и почему вам стоит написать своего.

Вступление

На первый взгляд, Telegram — это просто очередной мессенджер. Реклама гласит, что он быстр, защищён, в нём нет рекламы и всё такое. Но у него есть важная фича — боты!

Бот — это не просто «автоответчик». Его правильнее считать автоматизированным помощником. Представим, что вы хотите поделиться в групповом чате видео с YouTube, но ссылки у вас нет.

Вот стандартный алгоритм действий без бота:

  • открываем YouTube в браузере;
  • находим видео;
  • нажимаем на «Поделиться» (и надеемся, что в списке будет наш мессенджер);
  • если нашего мессенджера в списке не оказалось, копируем ссылку на видео;
  • возвращаемся в мессенджер и делимся ссылкой.

Да, многие привыкли делать именно так. Однако бот позволит действовать следующим образом:

  • переписываемся в мессенджере;
  • вводим @vid и название видео, которое вы хотите найти и скинуть в беседу;
  • отправляем его.

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

18 ноября – 20 декабря, Москва, 43 990 ₽

Telegram позволяет пользователям создавать своих ботов. Ответим на вопрос «Почему мне стоит написать своего?» — это, пожалуй, самый простой способ понять, что такое API.

Круто, начинаем писать бота?

Обо всём по порядку. Сперва нужно зарегистрироваться в Telegram. Наиболее удобно использовать веб-клиент для знакомства с основными принципами работы ботов и API.

Откройте приложение, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. После выполнения первых шагов вы получите:

Собственно, вот и всё. На данном этапе ваш бот полностью пассивен.

Вам нужно начать беседу с ботом. Введите в поисковой строке его имя и нажмите на кнопку /start . Отправьте сообщение, например, «Привет». Это первое сообщение очень важно, поскольку оно станет первым обновлением, которое получит ваш бот.

Если вы в первый раз работаете с API, то разобраться вам поможет браузер. Откройте новую вкладку и воспользуйтесь Telegram API, перейдя по ссылке:

Открыв этот адрес в браузере, вы отправите запрос на сервер Telegram, и он ответит вам в формате JSON. Ответ чем-то похож на словарь в Python. Вы увидите что-то вроде такого:

Если вы изучите раздел метода /sendMessage в документации, то увидите, что он принимает два параметра: chat_id и text . Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого и & для всех последующих. Команда для отправки сообщения будет выглядеть так:

Попробуйте получить ответ от вашего бота, подставив в качестве chat_id значение, полученное после вызова /getUpdates (в нашем примере — 303262877 ). Текст сообщения может быть любым. Запрос должен выглядеть примерно так:

И когда же будет код?

Если вы пользуетесь Windows и у вас не установлен Python, скачать его можно с официального сайта. Вообще версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии (или, как минимум, Python 2.x) уже установлены.

Затем нужно установить pip. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Загвоздка в том, что разные версии Python используют разные pip. Если у вас macOS, вы можете попробовать следовать советам со Stack Overflow. В случае с Windows вам нужно скачать get-pip.py, открыть командную строку, перейти в директорию со скачанным файлом и выполнить команду:

Самое сложное позади. Установим пакет requests при помощи pip:

А теперь — код

Теперь, когда вы поняли, что такое API, и установили все необходимые инструменты, напишем скрипт, который будет проверять обновления и отвечать на новые сообщения.

Сперва бот должен проверить обновления. Первое сообщение можно расценивать как самое свежее, но getUpdates возвращает все обновления за последние 24 часа. Напишем небольшой скрипт, чтобы получить самое последнее обновление:

Словарь обновлений состоит из двух элементов: ok и results . Нас интересует вторая часть — список всех обновлений, полученных ботом за последние 24 часа.

Узнать больше о библиотеке requests можно, прочитав документацию. По сути, каждый раз, когда вам нужно получить, обновить или удалить информацию, хранящуюся на сервере, вы отправляете запрос и получаете ответ.

Теперь нужно добавить ещё 2 функции. Первая будет доставать chat_id из обновления, а вторая — отправлять сообщение.

Помните, как мы объединяли параметры при помощи ? и & ? Вы можете сделать то же самое, добавив словарь в качестве второго дополнительного параметра в функциях get / post из пакета requests.

Скрипт готов, но он не идеален. Главным минусом является необходимость запускать его каждый раз, когда мы хотим, чтобы бот отправил сообщение. Исправим это. Чтобы бот слушал сервер и получал обновления, нам нужно запустить основной цикл. На новой строке, после import requests , добавьте from time import sleep . После этого замените две последние строки на следующий код:

Хотя мы и добавили таймаут в 1 секунду, пример выше можно использовать только в обучающих целях, поскольку он использует частые опросы (short polling). Это плохо влияет на сервера Telegram, поэтому их нужно избегать. Есть ещё два способа получения обновлений через API — длинные опросы (long polling) и вебхуки (webhooks). Если мы будем использовать способ получения обновлений через getUpdates без параметров, то запросы будут происходить слишком часто.

Поскольку мы начали использовать в скрипте основной цикл, мы должны переключиться на длинные опросы. Сперва изменим первую функцию, добавив в неё параметр timeout . Сам по себе он не уменьшит частоту проверки обновлений и будет работать только в том случае, когда обновлений нет. Чтобы помечать уже просмотренные обновления, нужно добавить параметр сдвига offset :

Теперь бот должен работать нормально, но его всё ещё можно улучшить. Давайте инкапсулируем все функции в один класс. Должно получиться что-то вроде этого:

Последний штрих — объявим переменные и научим бота приличным манерам. Сделаем так, чтобы бот приветствовал вас раз в день, при этом фраза должна зависеть от времени суток. Для этого добавьте следующий код в ваш скрипт:

Теперь вы можете улучшать бота так, как захотите. Можно, например, настроить отправку медиафайлов или добавить собственные кнопки.

Устрой деплой

Последним шагом будет развёртывание вашего бота на сервере. Наверняка у вас его нет, да и покупать не хочется — но это необязательно. Сейчас существует множество бесплатных облачных решений, из которых мы выберем Heroku.

Сперва зарегистрируйтесь на GitHub. Создайте аккаунт (рано или поздно он вам точно пригодится) и установите Git. На Linux выполните следующую команду:

На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku.

Теперь вам нужно навести порядок в файлах. Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :

Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env .

Теперь вам нужно склонировать git-репозиторий. Введите следующую команду:

Поместите скрипт в папку, полученную в результате выполнения команды git clone .

Вернитесь в папку my_env и запустите virtualenv :

Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env).

Перейдите в папку репозитория и ещё раз установите модуль requests:

Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:

Создайте Procfile . В этом файле вам нужно разместить инструкции по работе с вашим скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):

Добавьте файл __init__.py в вашу папку. Он может быть пустым, но он должен там быть.

Отправьте коммит с изменениями в репозиторий:

Теперь развернём бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль. Если вы столкнётесь с какими-то проблемами, обратитесь к этому руководству.

Илон Маск рекомендует:  Что такое код fbsql_tablename

Рассмотрим лишь те действия, которые нужны для развёртывания приложения. Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду.

Если вы пользуетесь Ubuntu, используйте следующие команды:

Если возникнут ошибки, проверьте, присутствуют ли все зависимости.

Теперь выполните следующие команды:

С этого момента ваше приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:

Коды ошибок можно найти на сайте Heroku.

Бесплатный аккаунт накладывает некоторые ограничения. Тем не менее теперь у вас есть полностью рабочий бот — поздравляем! Продолжить изучение возможностей ботов для Telegram вам поможет видеокурс — в нём используют PHP, но суть остаётся той же.

Автоматическое развёртывание проекта при обновлении кода в репозитории :: Хранитель заметок

Автоматическое развёртывание проекта при обновлении кода в репозитории

Я уже не представляю себе процесс разработки без системы контроля версий. Но помимо явного полезного действия, такие системы при определённых событиях могу вызывать различные скрипты (например, запрос по URL или отправка уведомлений на электронную почту). Этим можно воспользоваться для автоматического обновления кода проекта на сервере при наличии изменений в определённой ветке.

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

Для хостинга приватных Git-репозиториев я использую Bitbucket. Там есть настройка «Webhooks». Webhook — это URL, на который Bitbucket делает POST-запрос. Нам нужно написать скрипт, который бы вызывался бы на каждый запрос, загружал изменения из Git-запозитория и выполнял другие полезные действия.

Все команды и настройки были произведены на чистом сервере Ubuntu 17.04

Подготовка окружения

В файл /etc/apt/sources.list.d/nginx.list добавляем адрес репозитория с официальными пакетами nginx:

Теперь загрузим ключ, которым подписаны пакеты и установим nginx и fcgiwrap :

Добавим конфигурацию сервера, который будет принимать запросы от Git-репозитория. Создадим файл /etc/nginx/conf.d/deploy.conf со следующим содержимым:

Каждый раз, когда nginx получить запрос по адресу http://deploy.my-cool-project.com/push-hook , на сервере будет выполнен скрипт /var/www/deploy/deploy.sh . Давайте создадим его.

Содержимое файла deploy.sh :

Обязательно установим флаг «eXecute» у этого скрипта:

Теперь можно проверить как он работает:

Клонирование репозитория

Перейдём к настройке git и первоначальному клонированию проекта на сервере.

Генерируем ключ для доступа:

Добавляем этот ключ в панели управления репозиторием. Ключ для доступа имеет права «только чтение» и специально создаётся для того, чтобы система CI/CD могла получать изменения.

Сохраняем публичный ключ удаленного сервера:

Команда ssh делает это автоматически при первом подключении к неизвестному хосту во время процедуры обмена ключами. Но сохраняет она этот публичный ключ в файл для пользователя, выполнившего команду, и только после положительного ответа на запрос. Чтобы команда git pull нормально выполнялась в фоновом процессе под пользователем www-data , публичный ключ нужно добавить вручную в общий файл.

Установим владельца папки /var/www/deploy и её содержимого:

Теперь можно клонировать репозиторий:

Так как мы используем специальный ключ для доступа к репозитории, то мы явно должны сообщить команде git о нём. Однако она не предоставляет соответствующей опции. Данная проблема решается через переменную окружения GIT_SSH_COMMAND . В ней можно указать любые настройки, которые нам нужны.

Подтягивание изменений

Когда мы запушим в репозиторий какие-то изменения, Git-сервер вызовет webhook и передаст информацию о них в виде JSON-объекта. В самом простом варианте, деплой можно запускать при любых изменениях. Но корректнее было бы отслеживать только изменения в нужной ветке, например, master .

Для парсинга JSON в bash-скрипте я буду использовать команду jq .

Обновим файл deploy.sh :

Теперь мы ожидаем только POST-запрос с соответствующим заголовками и данными. Если в среди всех коммитов встретились изменения в ветке master , то запускается загрузка этих изменений из репозитория и вызов скрпита build.sh в корне проекта.

Фактические действия, необходимые для сборки, например, загрузка пакетов из npm-репозитория, запуск webpack, копирование артефактов и т.п., удобнее вынести именно в скрипт build.sh . Это вполне логично, так как для разных проектов требуются разные действия. К тому же он будет обновляться вместе с проектом и загружаться автоматически.

Теперь можно настроить webhook в Bitbucket.

Заключение

Данное решение покрывает лишь минимально необходимые требования. Оно не является заменой популярных систем CI/CD. Тем не менее, оно стабильно, прекрасно подходит для экспериментальных проектов и заметно сокращает количество рутинных операций для небольшой команды разработчиков.

GetUpdateRect

Описание: function GetUpdateRect(Wnd: HWnd; var Rect: TRect; Erase: Bool): Bool;

Считывает в ARect наименьший замыкающий пpямогольник области обновления окна.

Паpаметpы:

Wnd: Идентификатоp окна.

Rect: Пpинимающая стpуктуpа TRect.

Erase: Не нуль, если нужно стеpеть фон области обновления.

Возвpащаемое значение:

Если область обновления непуста, то не нуль; 0 — в пpотивном случае. функция находится в файле user32.dll

Форум русскоязычного сообщества Ubuntu

За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Ошибки при выполнении sudo apt-get update (Прочитано 1068 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страница сгенерирована за 0.068 секунд. Запросов: 22.

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

getUpdates ETELEGRAM 409 Conflict: terminated by other getUpdates request; #550

Comments

Copy link Quote reply

ricustr commented Mar 22, 2020

I’m getting this error some times on restart bot.
Does somebody know more information or how to check running instances?

I see more people catch the same error, but nobody can response.
#488

This comment has been minimized.

Copy link Quote reply

s >Mar 23, 2020 •

I think the session is not properly terminated, so getUpdates continue get updates after CTRL-C or similar and generate conflict, you can solve it by terminate process maybe.
Can you provide server, platform and other infos?

This comment has been minimized.

Copy link Quote reply

ricustr commented Mar 23, 2020

Do you mean, session as running instance of bot?
I think so, because this error appear not every time.
How terminate session correctly, or how can I catch getUpdates events to see what happens, if it is possible.
Of course, I use a dev bot on my laptop (Ubuntu 17.04) and another for prod on physical server (Ubuntu 16.04.4 LTS) for prod.

This comment has been minimized.

Copy link Quote reply

s >Mar 23, 2020

That error means: «There are two or more bots that listen updates at same bot token»
So i think you can check process list in your server, what system you use to keep bot alway on? (for example i use pm2)

To print all exception use:

But ETELEGRAM means an error printed by telegram server, you can’t get other infos.

This comment has been minimized.

Copy link Quote reply

ricustr commented Mar 23, 2020

Thank for you response.
I use pm2, but i will check processes for bot instance.
Okay. I will add methods and see more info and add here.
thank you again.

This comment has been minimized.

Copy link Quote reply

askucher commented Apr 4, 2020

but how to run 2 instances of the bot on one server?

This comment has been minimized.

Copy link Quote reply

s >Apr 4, 2020

@askucher Only one istance can listen for updates, otherwise you must use two different bot token

This comment has been minimized.

Copy link Quote reply

ricustr commented Apr 13, 2020

@sidelux Unfortunately, I can’t catch
`process.on(‘uncaughtException’, function (error) <
console.log(«\x1b[31m», «Exception: «, error, «\x1b[0m»);
>);

process.on(‘unhandledRejection’, function (error, p) <
console.log(«\x1b[31m»,»Error: «, error.message, «\x1b[0m»);
>);`
, but the ETELEGRAM 409 Conflict: is still persist. I will try again to check processes after stoped running instance. Thanks.

This comment has been minimized.

Copy link Quote reply

nvcken commented May 24, 2020

@sidelux as Telegram only allow on instance can listen for updates, then how can we scale that instance service what happen if that process handle large messages requests

This comment has been minimized.

Copy link Quote reply

saeedhei commented May 24, 2020

@sidelux For the first time I will want to use pm2, Can you send me a sample pm2 project configured with two different bot token always on?

This comment has been minimized.

Copy link Quote reply

vjrj commented May 24, 2020

@saeedhei I have two telegram bots running with pm2 and this is quite straightforward and robust. I have two, one in English and one in Spanish.
https://t.me/AllAgainstTheFire_bot
https://t.me/TodosContraElFuego_bot

Илон Маск рекомендует:  Что такое код dba_replace

my only recommendation after pm2 start your bots its to use pm2 save to maintain this instances after this server reboots.

This comment has been minimized.

Copy link Quote reply

saeedhei commented May 24, 2020 •

@vjrj Should I have 2 index.js for 2 bot and 2 pm2 start ?
I mean how should be my package.json file?

This comment has been minimized.

Copy link Quote reply

vjrj commented May 25, 2020

I have the same code base that I pull from my github repo in two different directories and different settings.json on each with bot credentials, and sensible API data, etc.

I recommend you to play with pm2 start etc with two simple hello world apps.

Also, I don’t use it, but maybe this yeoman generator is useful for you:
https://github.com/ashneo76/generator-telegram-bot

This comment has been minimized.

Copy link Quote reply

saeedhei commented May 27, 2020

@vjrj Is this process.yml ok for 2 bot?

This comment has been minimized.

Copy link Quote reply

mutantcornholio commented Jul 1, 2020

I guess telegram engineers didn’t want to make complex API with message balancing or synchronization tokens, or whatever.

If you want to run several node.js instances in one node.js cluster, I’d recommend polling events in master process and sending them to workers in process.send()
If you want to run your bot on several servers, I would recommend creating a lightweight balancing proxy (possibly, with a failover instance waiting nearby) that sends updates to workers. You could do balancing on your own, or use some job queue, like RabbitMQ.
The >

This comment has been minimized.

Copy link Quote reply

ozodrukh commented Jul 13, 2020

This can be caused by manual startPolling() calling, due to polling start automatically if you passed when creating a bot

This comment has been minimized.

Copy link Quote reply

sutangu commented Apr 11, 2020

Hi, everybody. It was fixed. Maybe it can be temporarily, but I have mistakes stopped:

This comment has been minimized.

Copy link Quote reply

rotimi-best commented Nov 7, 2020

Hi, everybody. It was fixed. Maybe it can be temporarily, but I have mistakes stopped:

Mine didn’t stop. Still have the same problem.

Как обойти ограничение getUpdates? (Telegram BOT)

Недавно я пытался создать функциональную телеграмму BOT с использованием официального API, но у меня есть некоторые проблемы. Цель BOT — перенаправить все сообщения, полученные от человека x, в группу y.

BOT проверяет » https://api.telegram.org/bot <>/getUpdates».format(TOKEN) для своего последнего полученного сообщения, чтобы он мог проверить, что это за сообщение, и если он отправляется человеком x. И все это работало до тех пор, пока мой URL-адрес не обновился после того, как он ударил 100 записей.

Должен быть способ очистить эти записи на автоматической основе? Я немного прочитал «-offset» и попытался реализовать его через строку URL-запроса, но, похоже, это не так.

Спасибо за помощь.

Решил проблему немного по-другому, используя смещение (угадайте по истечении заданного времени, даже я могу это узнать).

Поскольку после экземпляра, где я отправляю сообщение, мне больше не нужны старые обновления, я использовал это:

где обновления равны:

Как сказано, def вызывается после инструкции send_message в форме:

который будет следить за тем, чтобы последнее обновление в getUpdates было первым обновлением после повторного запуска кода

Базовые команды apt-get и apt-cache

Утилита apt-get — производительная свободная консольная программа, используемая и работающая с библиотекой APT (Advanced Packaging Tool) для выполнения установки новых пакетов с ПО, удаления существующих, обновления установленых, а также для обновления всей операционной системы.

Консольная утилита apt-cache используется для поиска в кеше программных пакетов APT. Говоря простыми словами, этот инструмент, используется для поиска пакетов, сбора информации о пакетах и поиска пакетов, доступных для установки в операционных системах, основанных на Debian или Ubuntu.

Как можно получить список всех доступных пакетов?

Чтобы увидеть все доступные пакеты, выполните следующую команду:

Как можно найти имя пакета и его описание.

Чтобы найти название пакета и его описание перед установкой, используйте флаг «search». Использование “search” c apt-cache отобразит список подходящих пакетов с кратким описанием. Например, вы хотите найти описание пакета vsftpd : чтобы сделать это, команда должна быть вот такой:

Чтобы найти и перечислить все пакеты, имя которых начинается с vsftpd , вы можете использовать следующую команду:

Как я могу просмотреть информацию о пакете?

Например, если вы хотите ознакомиться с информацией о пакете, с его кратким описанием, отображающим номер версии, контрольные суммы, размер, размер после установки, категории и так далее, вы можете использовать подкоманду «show», как показано ниже:

Как можно проверить зависимости какого-либо пакета?

Чтобы проверить зависимости конкретного пакета, вы можете использовать подкоманду showpkg , чтобы узнать, установлены эти зависимости или нет. Например, используйте команду showpkg вместе с названием пакета.

Как можно просмотреть статистику кэша?

Подкоманда stats отобразит полную статистику о кеше, например, полное число пакетов, найденное в кеше. Используйте такую команду:

Как обновить список пакетов в системе?

Команда update используется для синхронизации и обновления индексных файлов пакетов. Синхронизация происходит с источниками, указанными в файле /etc/apt/sources.list. Эту команду можно использовать, например, чтобы не упускать важные обновления пакетов.

Как обновить пакеты в системе?

Команда upgrade используется для обновления всего установленного на данный момент софта в вашйе системе. Иногда может получиться так, что обновление установить нельзя из-за какого-либо другого пакета, который требует старую версию.

Но если вы хотите обновиться вне зависимости от требований пакетов, используйте подкоманду dist-upgrade :

Как я могу установить или обновить какой-либо конкретный пакет?

Подкоманда install используется для установки или обновления какого-либо пакета.

Как я могу установить несколько пакетов сразу?

Вы можете ввести названия нескольих пакетов, чтобы установить их одновременно. Например, чтобы установить пакеты nethogs и goaccess , вы можете выполнить следующую команду:

Как установить несколько пакетов по «маске» названия

С помощью регулярных вырежний вы можете добавлять несколько пакетов с помощью специальных символов. Например, можно использовать звездочку, чтобы установить все пакеты, которые содержат строку «name» в названии:

Как установить пакеты без обновления.

Использование флага –no-upgrade предотвратит обновление уже установленных пакетов.

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

Флаг –only-upgrade не установит новые пакеты, а только обновит существующие.

Как я могу установить определенную версию пакета?

Представим, что вам необходимо установить специфичную версию пакета, просто используйте знак равно вместе с именем пакета и припишите желаемую версию.

Как удалить пакеты без удаления настроек?

Чтобы удалить программные пакеты без удаления их конфигурационных файлов (для дальнейшего их использования), используйте команду remove как показано.

Как полностью удалить пакеты?

Чтобы удалить пакет вместе с его файлами настроек, используете подкоманду purge , как показано ниже.

Или вы можете объединить обе команды, вот так:

Как можно очистить место на диске?

Команда clean используется для освобождения дискового пространствва за счет удаления полученных .deb-файлов пакетов в вашем локальном репозитории.

Как только загрузить исходный код пакета?

Чтобы только загрузить исходный код пакета, вы можете использовать опцию –download-only source с именем пакета, например:

Как можно загрузить и распаковать пакет?

Чтобы загрузить и распаковать исходный код пакета в специальную директорию, выполните следующую команду:

Как можно загрузить, распаковать и скомпилировать исходный код пакета?

Вы также можете загрузить, распаковать и скомпилировать исходный код пакета, используя опцию ‘–compile‘, как показано ниже:

Как загрузить пакет без установки

Используя опцию «download», вы можете загрузить любой пакет, не устанавливая его. Например, следующая команда только загрузит пакет nethogs в текущую рабочую директорию.

Как можно просмотреть лог изменений (changelog) пакета?

Флаг changelog загружает лог изменений пакета и отображает версию пакета, если он установлен.

Как можно исправить сломанные зависимости?

Команда «check» — инструмент для диагностики, он используется для обновления кеша пакетов и проверки на сломанные зависимости.

Как можно найти и собрать зависимости?

Команда build-dep ищет и устанавливает собранные зависимости нужного пакета. Если пакет отсутствует в локальном репозитории, вы получите ошибку.

Как можно автоматически очистить кеш Apt-Get?

Команда autoclean удаляет все .deb-файлы из /var/cache/apt/archives для освобождения свободного места на жестком диске.

Как можно автоматически удалить ненужные пакеты?

Подкоманда autoremove используется для автоматического удаления пакетов, которые были установлены как зависимости других, но сейчас они больше не нужны. Например, следующая команда удалит установленный пакет вместе с его зависимостями.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL