Spaces:
Running
Running
| from threading import RLock | |
| from Powers.database import MongoDB | |
| INSERTION_LOCK = RLock() | |
| class Floods(MongoDB): | |
| """Class to store flood limit and action of a chat""" | |
| db_name = "flood" | |
| def __init__(self): | |
| super().__init__(self.db_name) | |
| def save_flood( | |
| self, | |
| chat_id: int, | |
| limit: int, | |
| within: int, | |
| action: str, | |
| ): | |
| with INSERTION_LOCK: | |
| if not (curr := self.find_one({"chat_id": chat_id})): | |
| return self.insert_one( | |
| { | |
| "chat_id": chat_id, | |
| "limit": limit, | |
| "within": within, | |
| "action": action | |
| }, | |
| ) | |
| if ( | |
| limit != int(curr['limit']) | |
| or within != int(curr['within']) | |
| or action != str(curr['action']) | |
| ): | |
| return self.update( | |
| { | |
| "chat_id": chat_id | |
| }, | |
| { | |
| "limit": limit, | |
| "within": within, | |
| "action": action, | |
| } | |
| ) | |
| else: | |
| return | |
| def is_chat(self, chat_id: int): | |
| with INSERTION_LOCK: | |
| if curr := self.find_one({"chat_id": chat_id}): | |
| return [ | |
| str(curr['limit']), | |
| str(curr['within']), | |
| str(curr['action']), | |
| ] | |
| return False | |
| def get_action(self, chat_id: int): | |
| with INSERTION_LOCK: | |
| if curr := self.find_one({"chat_id": chat_id}): | |
| return curr['action'] | |
| return "Flood haven't set" | |
| def rm_flood(self, chat_id: int): | |
| with INSERTION_LOCK: | |
| if curr := self.find_one({"chat_id": chat_id}): | |
| self.delete_one({"chat_id": chat_id}) | |
| return True | |
| return False | |