File size: 2,067 Bytes
dee310b
 
 
 
 
 
058dd88
dee310b
 
ebf51e7
dee310b
ebf51e7
 
dee310b
 
4056428
 
 
 
 
dee310b
 
3c9449b
ebf51e7
 
058dd88
ebf51e7
 
058dd88
ebf51e7
 
3c9449b
4056428
 
 
3c9449b
 
 
 
 
 
 
 
 
 
 
 
 
058dd88
dee310b
 
3c9449b
 
 
 
 
 
dee310b
058dd88
e64dc9b
dee310b
3c9449b
e64dc9b
dee310b
058dd88
e64dc9b
dee310b
3c9449b
058dd88
dee310b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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