#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 Какой-то механизм хранения данных, да. Однако база данных может быть излишней для небольшого списка идентификаторов.