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