Spaces:
Sleeping
Sleeping
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
|