File size: 3,737 Bytes
51c8b2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9015bc5
 
51c8b2f
 
9015bc5
 
51c8b2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9015bc5
51c8b2f
9015bc5
51c8b2f
9015bc5
51c8b2f
 
 
9015bc5
51c8b2f
9015bc5
51c8b2f
9015bc5
51c8b2f
 
 
9015bc5
51c8b2f
9015bc5
51c8b2f
9015bc5
51c8b2f
 
 
9015bc5
51c8b2f
9015bc5
51c8b2f
9015bc5
51c8b2f
 
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from threading import RLock
from traceback import format_exc

from Powers import LOGGER
from Powers.database import MongoDB
from Powers.utils.msg_types import Types

INSERTION_LOCK = RLock()

class GIVEAWAY(MongoDB):
    """Class to store giveaway info of the chat"""
    db_name = "giveaway"

    def __init__(self):
        super().__init__(self.db_name)
    
    def save_give(
        self,
        chat_id:int, # Chat id for in which user want to do giveaway
        group_id:int, # entries chat id
        user_id: int, # User id of the person who have started the giveaway
        is_new:int=0, # Can old user vote? 0 for yes 1 for no
        entries:int=1, # Entries are allowed? 0 for no 1 for yes
        give:int = 1, # Giveaway is on or not? 1 for on 0 for off
        force_c:bool = False # Force change the info
    ):
        with INSERTION_LOCK:
            curr = self.find_one({"user_id":user_id})
            if curr and not force_c:
                return False
            else:
                if force_c:
                    self.delete_one({"user_id":user_id,})
                    self.insert_one(
                        {
                            "chat_id":chat_id,
                            "where":group_id,
                            "user_id":user_id,
                            "is_new":is_new,
                            "entries":entries,
                            "is_give":give
                        }
                    )
                    return True
    
    def give_info(self,group_id = 0, u_id = 0):
        with INSERTION_LOCK:
            if u_id and group_id:
                curr = self.find_one({"where":group_id, "user_id":u_id})
                if curr:
                    return curr
                else:
                    curr = self.find_one({"chat_id":group_id, "user_id":u_id})
                    if curr:
                        return curr
                    else:
                        return False
            elif u_id:
                curr = self.find_one({"user_id":u_id})
                if curr:
                    return curr
            elif group_id:
                curr = self.find_one({"where":group_id})
                if curr:
                    return curr
                else:
                    curr = self.find_one({"chat_id":group_id})
                    if curr:
                        return curr
                    else:
                        return False
    
    def is_vote(self, group_id):
        with INSERTION_LOCK:
            curr = self.find_one({"where": group_id})
            if curr:
                return True
            return False

    def start_vote(self,user_id, start=1):
        with INSERTION_LOCK:
            curr = self.find_one({"user_id":user_id})
            if curr:
                self.update({"user_id":user_id},{"is_give":start})
                return True
            return False

    def stop_entries(self,user_id,entries=0):
        with INSERTION_LOCK:
            curr = self.find_one({"user_id":user_id})
            if curr:
                self.update({"user_id":user_id},{"entries":entries})
                return True
            return False

    def update_is_old(self,user_id,old):
        with INSERTION_LOCK:
            curr = self.find_one({"user_id":user_id})
            if curr:
                self.update({"user_id":user_id},{"is_new":old})
                return True
            return False

    def stop_give(self, user_id, is_give=0):
        with INSERTION_LOCK:
            curr = self.find_one({"user_id":user_id})
            if curr:
                self.update({"user_id":user_id},{"is_give":is_give})
                return True
            return True