Оригинал на GitHub
Вопрос
Есть задача: постить ботом комментарии к определенной записи в телеграм-канале. С этим есть сложности, так как, чтобы попасть в запись нужно знать id не отправленного сообщения, а id сообщения, которое сам телеграм пересылает в связанную группу (участники, которой могут комментировать записи).
В результате, после отправки сообщения нужно выждать некоторое время (желательно немного, т.к. потом сообщение может затеряться), затем загрузить последние записи (чем меньше, тем лучше), найти среди них нужную по id отправленного сообщения для дальнейших отправок комментариев к нему.
Если делать "в лоб", то телеграм не всегда успевает отдать обновление и приходит пустота. Я сделал через sleep, но это тормозит добавление строки и отправку основного сообщения (которое будет комментироваться).
Задача выглядит так: как запустить выполнение действия "фоном" через 5 секунд.
Ответ
Для этой задачи можно использовать такой подход:
Отделить это действие в отдельный процесс.
В этом отдельном процессе прописать sleep в n-секунд
В том месте, где у нас срабатывает триггер, вызывающий это действие, вызываем вложенный код через exec с параметром ssh: true
.
=: while(action: $action_1; action: $check; action: $action_3)
check: exec(code: $code; ssh: true)
```code:totum
=: while(action: $sleep; action: $action)
sleep: sleep(sec: 10)
action: "some action"
```
action_1: "some action"
action_3: "some action"
ssh: true
— отделяет этот вызов в отдельный процесс, и теперь основное действие продолжится, а отделенный процесс подождет 10 секунд и потом выполнится.