Как избежать того, чтобы бот GroupMe дважды прочитал одно и то же сообщение при перезапуске на Heroku?

#python #heroku #groupme

#python #heroku #groupme

Вопрос:

Таким образом, по сути, мой бот GroupMe будет читать сообщения и искать конкретные команды.

Heroku автоматически перезапускает мой Dyno worker по крайней мере один раз в день.

Однако при перезапуске мой бот просканирует последние двадцать сообщений и в конечном итоге найдет команду, которую он уже выполнил, а затем повторит то же самое снова. Есть ли способ это исправить?

Код:

 def main():

while True:
    response = requests.get(groupchat_url, params = request_params)
    if response.status_code == 200:
        response_messages = response.json()['response']['messages']
        for message in response_messages:
            if message['text'].startswith("/command"):
                <do something>
  

Итак, response_messages будет содержать последние 20 сообщений, и для каждого сообщения, если оно начинается с «/ command», оно что-то сделает. Когда бот перезапустится, он снова что-то сделает для той же команды. Я не уверен, возможно ли это, но если кто-то знает что-то классное, что могло бы помочь решить эту проблему, я бы с удовольствием это услышал.

Комментарии:

1. Вас волнуют сообщения, полученные во время простоя во время перезапуска? Если нет, просто используйте логическое значение dry_run = True над циклом, а затем позже, если установлено, он только извлекает сообщения, но не выполняет команду. В конце цикла установите dry_run = False .

2. Вам нужно будет предоставить небольшую информацию о том, сколько данных вы храните. У каждого message есть message.id , которое прилагается к нему. (Вы бы получили к нему доступ, как message['id'] указано в приведенном выше коде.) Вы можете изменить свой запрос, чтобы запрашивать только сообщения с момента вашего последнего сообщения, которое вы обработали с помощью since_id параметра. Или вы можете сделать запрос, который вы уже делаете, но сохраняете идентификаторы сообщений для каждой обрабатываемой команды и сравниваете новые идентификаторы с вашим обработанным списком.

3. @DillonDavis Мне не все равно, но поскольку время простоя не такое уж долгое, это не должно быть слишком плохо? Не знаю

4. @Заметный компилятор Да, я пробовал since_id, но после перезапуска бот все равно будет считывать команду. Для хранения идентификаторов сообщений мне понадобится какая-то база данных для этого, верно?

5. @studentofcs Какой-то механизм хранения данных, да. Однако база данных может быть излишней для небольшого списка идентификаторов.