File size: 5,800 Bytes
f8935f3
 
52594e7
b645845
52594e7
68f5cf5
 
 
86c8341
 
68f5cf5
 
 
 
86c8341
b89a231
d6ef436
b89a231
fbcfeb4
 
f473aea
 
 
 
 
 
0fe45ac
f473aea
 
 
 
0fe45ac
 
 
 
f473aea
 
0fe45ac
 
 
f473aea
 
 
 
b89a231
86c8341
b89a231
d6ef436
b89a231
fbcfeb4
 
f473aea
e4435ed
f473aea
 
 
e4435ed
0fe45ac
e4435ed
 
 
 
0fe45ac
 
 
 
e4435ed
 
0fe45ac
 
 
f473aea
 
 
 
86c8341
 
0fe45ac
52594e7
 
 
 
6eccd26
52594e7
 
 
 
 
 
 
 
 
 
 
 
 
6eccd26
52594e7
 
 
6eccd26
52594e7
 
 
 
6eccd26
52594e7
 
 
6eccd26
52594e7
 
 
 
86c8341
6eccd26
52594e7
 
 
 
 
 
 
 
 
 
 
6eccd26
52594e7
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
import sqlite3
import json
import requests

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()

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

        if result:
            # Получаем данные о группе
            orders_data = json.loads(result[0]) if result[0] else {}
            group_status = orders_data.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.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