File size: 2,067 Bytes
9d5781e
 
 
 
 
 
51e1c40
9d5781e
 
f100e6b
9d5781e
f100e6b
 
9d5781e
 
6cef7ec
 
 
 
 
9d5781e
 
89ad488
f100e6b
 
51e1c40
f100e6b
 
51e1c40
f100e6b
 
89ad488
6cef7ec
 
 
89ad488
 
 
 
 
 
 
 
 
 
 
 
 
51e1c40
9d5781e
 
89ad488
 
 
 
 
 
9d5781e
51e1c40
1476bad
9d5781e
89ad488
1476bad
9d5781e
51e1c40
1476bad
9d5781e
89ad488
51e1c40
9d5781e
 
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