Size: a a a

2020 December 15

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
только у тебя два разных  с привязкой к разным кешам
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
а так
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
я бы делал свой кеш с временем на свой метод а не сетер
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
тогда в твоем примере можно было бы в хендлер добавить и время кеша
источник

ЕП

Евгений Петров... in aiogram [ru]
👑OGURCHIK🖤 ️
тогда в твоем примере можно было бы в хендлер добавить и время кеша
не понял
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
и даже динамически менять. вот спамить даже после 5 сек. ставим 10. 30. минуту. и вот уже движемся к бану
источник

ЕП

Евгений Петров... in aiogram [ru]
👑OGURCHIK🖤 ️
и даже динамически менять. вот спамить даже после 5 сек. ставим 10. 30. минуту. и вот уже движемся к бану
Звучит интересно, но не для моей задачи
источник

ЕТ

Евгений Тодоров... in aiogram [ru]
Народ, помогите решить баг. Дано: сервер pythonanywhere, webhook Flask, и код в котором происходит удаление сообщения, которое не существует и телега отправляет ошибку 400, которая почему-то заставляет код срабатывать еще раз и выходит замкнутый цикл... Как сделать так что б если приходит ошибка от телеги, то бот ее игнорил?
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
трай
источник

ЕТ

Евгений Тодоров... in aiogram [ru]
куда именно ставить? ибо вешал на саму функцию и толку не дало, выполняется трай, а потом ехепт...
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
ну так в ексепт просто игноришь
источник

ЕТ

Евгений Тодоров... in aiogram [ru]
👑OGURCHIK🖤 ️
ну так в ексепт просто игноришь
а других способов обработать нет? ибо в ехепте пользователю отправляется сообщение об ошибке, но без вебхука оно отправляется только когда реально ошибка, а тут все время... Как думаете если трай на в хендлер приема пост запроса запихнуть это поможет исключить ошибку?
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
try:        
     await message.delete()
except MessageToDeleteNotFound:
   тут если ошибка отправляем юзеру что  то
finally:
  тут есть успешно удалили
источник

ЕТ

Евгений Тодоров... in aiogram [ru]
👑OGURCHIK🖤 ️
try:        
     await message.delete()
except MessageToDeleteNotFound:
   тут если ошибка отправляем юзеру что  то
finally:
  тут есть успешно удалили
спасибо))
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
class aiogramTTLCache():
   def __init__(self, **ttl):
       self.ttl = ttl
       self.cache = {}

   def get(self, message: types.Message):
       ttl = self.cache.get(message.chat.id, {}).get(message.from_user.id, datetime(2000, 1, 1))
       if datetime.now() < ttl:
           return True
       self.cache.get(message.chat.id, {}).pop(message.from_user.id, None)
       return False

   def set(self, message: types.Message, **ttl):
       delta_ttl = ttl or self.ttl
       if not delta_ttl:
           raise Exception("where ttl idiot?")
       time = datetime.now() + timedelta(**delta_ttl)
       self.cache.setdefault(message.chat.id, {})[message.from_user.id] = time

   def left(self, message: types.Message) -> timedelta:
       if self.get(message):
           return self.cache.get(message.chat.id).get(message.from_user.id) - datetime.now()
       else:
           return timedelta()
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
дешевая замена ттлкеша
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
👑OGURCHIK🖤 ️
class aiogramTTLCache():
   def __init__(self, **ttl):
       self.ttl = ttl
       self.cache = {}

   def get(self, message: types.Message):
       ttl = self.cache.get(message.chat.id, {}).get(message.from_user.id, datetime(2000, 1, 1))
       if datetime.now() < ttl:
           return True
       self.cache.get(message.chat.id, {}).pop(message.from_user.id, None)
       return False

   def set(self, message: types.Message, **ttl):
       delta_ttl = ttl or self.ttl
       if not delta_ttl:
           raise Exception("where ttl idiot?")
       time = datetime.now() + timedelta(**delta_ttl)
       self.cache.setdefault(message.chat.id, {})[message.from_user.id] = time

   def left(self, message: types.Message) -> timedelta:
       if self.get(message):
           return self.cache.get(message.chat.id).get(message.from_user.id) - datetime.now()
       else:
           return timedelta()
class ThrottleMiddleware(BaseMiddleware):
   async def on_process_message(self, message: types.Message, data: dict):
       if not cache.get(message):
           cache.set(message)
           return
       else:
           cache.set(message, seconds=int(cache.left(message).total_seconds()*2))
           await message.answer(f"flood control wait {cache.left(message)} sec.")
           raise CancelHandler
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
а вот и пример с увеличением времени
источник

ЕТ

Евгений Тодоров... in aiogram [ru]
👑OGURCHIK🖤 ️
try:        
     await message.delete()
except MessageToDeleteNotFound:
   тут если ошибка отправляем юзеру что  то
finally:
  тут есть успешно удалили
Есть вопрос, возможно глупый, не пинайте сильно) Если прилетит ошибка при удалении сообщения, тогда применится код в финалли(знаю что он всегда работает и без ошибки), так вот после этого закрытие базы сработает или выйдет из функции ибо этот кусок уже не в финалли?
источник

👑️

👑OGURCHIK🖤 ️ in aiogram [ru]
сработает
источник