File size: 6,547 Bytes
5abd42f
 
 
fb60f49
5abd42f
fb60f49
b645845
52594e7
68f5cf5
 
 
86c8341
 
68f5cf5
 
 
 
86c8341
b89a231
0ce3faf
b89a231
fbcfeb4
0ce3faf
f473aea
 
 
 
 
 
0fe45ac
f473aea
 
 
 
0fe45ac
 
 
 
f473aea
 
0fe45ac
 
 
f473aea
 
 
 
b89a231
86c8341
b89a231
0ce3faf
b89a231
fbcfeb4
0ce3faf
f473aea
e4435ed
f473aea
 
 
e4435ed
0fe45ac
e4435ed
 
 
 
0fe45ac
 
 
 
e4435ed
 
0fe45ac
 
 
f473aea
 
 
 
86c8341
 
52594e7
0ce3faf
52594e7
 
6eccd26
52594e7
 
 
 
573cab7
52594e7
 
3a385ce
52594e7
573cab7
52594e7
 
0ce3faf
3a385ce
 
 
 
 
 
 
 
 
 
 
6eccd26
52594e7
 
 
6eccd26
52594e7
 
 
 
6eccd26
52594e7
 
 
6eccd26
52594e7
 
 
573cab7
52594e7
86c8341
0ce3faf
 
52594e7
 
0ce3faf
52594e7
 
 
 
 
 
 
6eccd26
a4c4228
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import sqlite3
import json
import requests
import logging

logging.basicConfig(level=logging.DEBUG)

def handle_webhook(data, key_callback_vk, db_name, vk_st_alone):
    # Преобразуем строку key_callback_vk в JSON
    key_callback_dict = json.loads(key_callback_vk)

    # Проверяем тип события
    if data['type'] == 'confirmation':
        # Получаем номер сообщества из данных
        group_id = str(data['group_id'])
        # Возвращаем соответствующий пароль
        return key_callback_dict.get(group_id, 'unknown')

    # Обработка события подписки на рассылку
    if data['type'] == 'message_allow':
        user_id = data['object']['user_id']
        group_id = data['group_id']
        print(f"User {user_id} subscribed to the mailing list of group {group_id}")

        # Записываем информацию о подписке в базу данных
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()

        # Проверяем, существует ли запись для данного пользователя
        cursor.execute("SELECT canal FROM contacts WHERE vk_id = ?", (user_id,))
        result = cursor.fetchone()

        if result:
            # Обновляем запись, если пользователь уже существует
            canal_data = json.loads(result[0]) if result[0] else {}
            canal_data[str(group_id)] = '1'
            canal_json = json.dumps(canal_data)
            cursor.execute("UPDATE contacts SET canal = ? WHERE vk_id = ?", (canal_json, user_id))
        else:
            # Создаем новую запись, если пользователь не существует
            canal_data = {str(group_id): '1'}
            canal_json = json.dumps(canal_data)
            cursor.execute("INSERT INTO contacts (vk_id, canal) VALUES (?, ?)", (user_id, canal_json))

        conn.commit()
        conn.close()

        return 'ok'

    # Обработка события отписки от рассылки
    if data['type'] == 'message_deny':
        user_id = data['object']['user_id']
        group_id = data['group_id']
        print(f"User {user_id} unsubscribed from the mailing list of group {group_id}")

        # Записываем информацию об отписке в базу данных
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()

        # Проверяем, существует ли запись для данного пользователя
        cursor.execute("SELECT canal FROM contacts WHERE vk_id = ?", (user_id,))
        result = cursor.fetchone()

        if result:
            # Обновляем запись, если пользователь уже существует
            canal_data = json.loads(result[0]) if result[0] else {}
            canal_data[str(group_id)] = '0'
            canal_json = json.dumps(canal_data)
            cursor.execute("UPDATE contacts SET canal = ? WHERE vk_id = ?", (canal_json, user_id))
        else:
            # Создаем новую запись, если пользователь не существует
            canal_data = {str(group_id): '0'}
            canal_json = json.dumps(canal_data)
            cursor.execute("INSERT INTO contacts (vk_id, canal) VALUES (?, ?)", (user_id, canal_json))

        conn.commit()
        conn.close()

        return 'ok'

    # Обработка события вступления в закрытую группу
    if data['type'] == 'group_join':
        user_id = data['object']['user_id']
        group_id = data['group_id']
        logging.info(f"User {user_id} requested to join group {group_id}")

        # Читаем информацию из базы данных
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()
        logging.debug(f"Connected to database: {db_name}")

        # Проверяем, существует ли запись для данного пользователя
        cursor.execute("SELECT * FROM contacts WHERE vk_id = ?", (user_id,))
        result = cursor.fetchone()
        logging.debug(f"Query result for user {user_id}: {result}")

        if result:
            # Получаем данные из столбца "orders" (предполагается, что данные хранятся в 17-м столбце)
            orders_data = result[17] if result[17] else '{}'
            logging.debug(f"Raw orders data for user {user_id}: {orders_data}")

            try:
                orders_data_json = json.loads(orders_data)
                logging.debug(f"Parsed orders data for user {user_id}: {orders_data_json}")
            except json.JSONDecodeError as e:
                logging.error(f"Failed to parse JSON for user {user_id}: {e}")
                orders_data_json = {}

            group_status = orders_data_json.get(str(group_id), 'not')
            logging.info(f"Group status for user {user_id} in group {group_id}: {group_status}")

            if group_status == 'yes':
                # Одобряем запрос на вступление
                logging.info(f"Approving join request for user {user_id} in group {group_id}")
                approve_join_request(group_id, user_id, vk_st_alone)
                return 'ok'
            else:
                # Отклоняем запрос на вступление
                logging.info(f"Denying join request for user {user_id} in group {group_id}")
                return 'not'
        else:
            # Если запись не найдена, отклоняем запрос
            logging.info(f"No record found for user {user_id}. Denying join request.")
            return 'not'

        conn.close()
        logging.debug("Database connection closed")

    # Если тип события неизвестен, возвращаем ошибку
    logging.error(f"Unknown event type: {data['type']}")
    return 'unknown event', 400

def approve_join_request(group_id, user_id, vk_st_alone):
    url = f'https://api.vk.com/method/groups.approveRequest'
    params = {
        'group_id': group_id,
        'user_id': user_id,
        'access_token': vk_st_alone,
        'v': '5.131'
    }
    response = requests.get(url, params=params).json()
    logging.info(f"Approve request response: {response}")
    return response