-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBotOutterApi.py
133 lines (113 loc) · 4.82 KB
/
BotOutterApi.py
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
# -*- coding: utf-8 -*-
import datetime
import json
import os
import pytz
import BotInnerApi
import VkApi
import main
def get_request_type(event):
if event.obj['form_id'] == 1:
return 'add'
elif event.obj['form_id'] == 2:
return 'remove'
else:
return 'unknown'
def add_request_notify(event, session, user_session):
from_id = event.obj['user_id']
link = event.obj['answers'][0]['answer']
ginfo = VkApi.get_groups_info([link.split('/')[-1]], user_session, optional=True)[0]
if not group_moderate(ginfo, user_session):
msg = 'Похоже группа из вашей заявки не прошла автомодерацию CBRG. ' +\
'Проверьте соответствует ли группа правилам CBR'
VkApi.send_message(msg, session, from_id)
return
text = 'Заявка на добавление в рейтинг' +\
'\nОт: vk.com/id' + str(from_id) +\
'\nГруппа: [' + ginfo['screen_name'] + '|' + ginfo['name'] + ']'
photo = VkApi.get_photo_to_send(ginfo['photo_200'], session, int(os.environ.get('USER_NOTIFY')))
buttons = [
{
'text': 'Принять',
'payload_key': ginfo['screen_name'],
'payload_value': [1, from_id]
},
{
'text': 'Отклонить',
'payload_key': ginfo['screen_name'],
'payload_value': [0, from_id]
}
]
VkApi.send_message_attach(text, session, int(os.environ.get('USER_NOTIFY')), photo=photo, buttons=buttons)
def remove_request_notify(event, session, user_session):
from_id = event.obj['user_id']
link = event.obj['answers'][0]['answer']
ginfo = VkApi.get_groups_info([link.split('/')[-1]], user_session, optional=True)[0]
text = 'Заявка на удаление из рейтинга' +\
'\nОт: vk.com/id' + str(from_id) +\
'\nГруппа: [' + ginfo['screen_name'] + '|' + ginfo['name'] + ']'
photo = VkApi.get_photo_to_send(ginfo['photo_200'], session, int(os.environ.get('USER_NOTIFY')))
buttons = [
{
'text': 'Принять',
'payload_key': ginfo['screen_name'],
'payload_value': [-1, from_id]
},
{
'text': 'Отклонить',
'payload_key': ginfo['screen_name'],
'payload_value': [0, from_id]
}
]
VkApi.send_message_attach(text, session, int(os.environ.get('USER_NOTIFY')), photo=photo, buttons=buttons)
def process_request(groups_list, groups_data, event, session, user_session):
if 'payload' not in event.obj['message'].keys():
if event.obj['message']['from_id'] == int(os.environ.get('USER_NOTIFY')):
if event.obj['message']['text'] == 'сброс':
BotInnerApi.save_groups_data({'last': {}, 'deltas': {}, 'all': {}, 'likes': {}})
if event.obj['message']['text'] == 'бэкап':
BotInnerApi.set_list()
if event.obj['message']['text'] == 'амнистия':
BotInnerApi.save_banlist([])
if event.obj['message']['text'] == 'list':
print(groups_list)
if event.obj['message']['text'] == 'data':
print(groups_data)
if event.obj['message']['text'] == 'пост':
main.daily_post(user_session, session)
if 'сброс ' in event.obj['message']['text']:
step = int(event.obj['message']['text'][7:])*(-1)
groups_data = \
{
'last': groups_data['last'][step:],
'deltas': groups_data['deltas'][step:],
'all': groups_data['all'][step:],
'likes': groups_data['likes'][step:]
}
BotInnerApi.save_groups_data(groups_data)
print(groups_data)
return
payload = json.loads(event.obj['message']['payload'])
if list(payload.values())[0][0] == 1 and not (list(payload.keys())[0] in groups_list):
groups_list[list(payload.keys())[0]] = list(payload.values())[0][1]
BotInnerApi.save_list(groups_list)
VkApi.send_message('Группа из вашей заявки добавлена в список CBR', session, list(payload.values())[0][1])
elif list(payload.values())[0][0] == -1 and list(payload.keys())[0] in groups_list:
del groups_list[list(payload.keys())[0]]
BotInnerApi.save_list(groups_list)
VkApi.send_message('Группа из вашей заявки удалена из списка CBR', session, list(payload.values())[0][1])
else:
VkApi.send_message('Ваша заявка в CBR отклонена модератором', session, list(payload.values())[0][1])
VkApi.send_message('Обработано', session, event.obj['message']['from_id'])
def group_moderate(group_info, user_session):
try:
is_open = (group_info['is_closed'] == 0)
is_able = not ('deactivated' in list(group_info.keys()))
is_members_open = ('members_count' in list(group_info.keys()))
post_time = VkApi.get_last_post(user_session, group_info['screen_name'])['date']
three_month_ago = (datetime.datetime.now(pytz.timezone('Europe/Moscow')) - datetime.timedelta(days=90)).timestamp()
is_active = post_time - three_month_ago
return is_open and is_members_open and is_able and (is_active > 0)
except Exception as e:
print(repr(e))
return True