-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathflask_app.py
99 lines (77 loc) · 4.02 KB
/
flask_app.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
import vk_api
from RASPIS import TimeChecker, savelast, GetRaspis
from flask import Flask, Response, request
import random
#В режиме теста бот будет нормально отвечать только пользователю с testerID, остальные будут предупреждены о проведении технических работ
TESTING = True
testerID = 366782296
app = Flask(__name__)
vk_session = vk_api.VkApi(token='2a85a114c3af837c332b88f804290e76ddf4f326025a20e352d897d41a3fd5c3c2e47bb56a1df0e226f83')
vk = vk_session.get_api()
def GetUsersId():
user_id_items = vk.groups.getMembers(group_id='207336652')
return user_id_items['items']
def sender(id, text):
try:
vk.messages.send(user_id=id, message=text, random_id=random.getrandbits(64))
except: pass
##Функции для переконвертирования ответа с расписанием в формат сообщения
def RaspisForDay(id):
sender(id, '\n'.join(filter(None, GetRaspis(0))))
helpDict = (
'Понедельник:',
'Вторник:',
'Среда:',
'Четверг:',
'Пятница:'
)
reversedHelpDict = {
'пн': 0,
'вт': 1,
'ср': 2,
'чт': 3,
'пт': 4,
}
def RaspisForWeek(id):
sender(id, '\n\n'.join([helpDict[i] + '\n' + '\n'.join(filter(None, day))
for i, day in enumerate(GetRaspis(1))]))
def RaspisForWeekDay(id, weekDay):
sender(id, '\n'.join(filter(None, GetRaspis(1)[weekDay])))
@app.route('/')
def Main():
PushMessage = TimeChecker()
if PushMessage:
savelast()
for i in GetUsersId():
if (not TESTING) or (TESTING and i == testerID):
sender(i, PushMessage)
return "Я все отправил"
return "Нечего отправлять "
@app.route('/reset')
def Reset():
savelast(t=False)
return 'Очистил!'
@app.route('/GetEvent', methods=['POST'])
def GetEvent():
data = request.get_json()
if data['type'] == 'group_join':
sender(data['object']['user_id'], 'Добро пожаловать!✌🏻\nЭтот бот будет напоминать тебе о паре за 15 минут.\nСоветуем не отключай уведомления.\nСписок команд:\n“р” - расписание на текущий день\n“в” - расписание на всю неделю,\n“пн” - “пт” - расписание на определенный день')
if data['type'] == 'message_new':
msg = data['object']['message']['text'].lower()
id = data['object']['message']['peer_id']
if (not TESTING) or (TESTING and id == testerID):
if id in GetUsersId():
if msg == "р":
RaspisForDay(id)
elif msg == "в":
RaspisForWeek(id)
elif msg == 'с':
sender(id ,'Добро пожаловать!✌🏻\nЭтот бот будет напоминать тебе о паре за 15 минут.\nСоветуем не отключай уведомления.\nСписок команд:\n“р” - расписание на текущий день\n“в” - расписание на всю неделю,\n“пн” - “пт” - расписание на определенный день')
elif msg in reversedHelpDict:
RaspisForWeekDay(id, reversedHelpDict[msg])
else:
sender(id, 'Неверная команда. Напиши "С", чтобы узнать список команд')
else:
sender(id, 'Ты не подписан! Я с такими не общаюсь.')
else: sender(id, 'К сожалению, бесплатный сервер только один. Так что работа бота и его тестировка проходят на одном и том же сервере. Напишите позже.')
return Response('ok'), 200