-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
214 lines (174 loc) · 13 KB
/
main.py
File metadata and controls
214 lines (174 loc) · 13 KB
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
from time import sleep, time
import vk_api as vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.longpoll import VkLongPoll, VkEventType
from config import TOKEN
# Это не трогать
LIST_FACS = ['информатики и вычислительной техники', 'машиностроительный', 'медицинский', 'иностранных языков', 'историко-географический', 'фпмфиит', 'ричфиж',
'радиоэлектроники и автоматики', 'управления и социальных технологий', 'химико-фармацевтический', 'энергетики и электротехники', 'строительный', 'экономический', 'искусств', 'юридический']
# Это не трогать
ANSWERS = ['чепуха', 'факт']
# Это можно трогать
QUESTIONS = [
"""Источник землетрясений находится в земном ядре?""",
"""Чепуха!
Места в недрах Земли, где непосредственно происходят подвижки горных пород, называются гипоцентрами землетрясений.
Они находятся на глубинах до нескольких сотен километров.Причем большая часть землетрясений локализована в пределах земной коры, которая не превышает по толщине нескольких десятков километров""",
"""Международная космическая станция движется в атмосфере Земли?""",
"""Факт!
Высота полета МКС — около 400 км. Между тем, следы земной атмосферы прослеживаются до расстояний около 100 тыс. км. Слой атмосферы, лежащий в диапазоне высот от 80-90 км до 800 км, называется термосферой.
Верхние разреженные слои атмосферы, вместе с тем, принято считать космическим пространством. Их не следует путать с так называемыми плотными слоями атмосферы, в которых из-за высокого сопротивления воздуха невозможно орбитальное движение.""",
"""Протоны и нейтроны состоят из более мелких частиц?""",
"""Факт!
Протоны и нейтроны, из которых состоят атомные ядра, по современным представлениям, не являются фундаментальными частицами материи. Они, в свою очередь, состоят из кварков, которые наряду с электронами, нейтрино и фотонами, являются подлинно элементарными частицами. В состав каждого протона и каждого нейтрона входит по три кварка.
""",
"""Гомеопатия не имеет убедительных научных обоснований?""",
"""Факт!
Медики многократно проводили слепые проверки эффективности гомеопатических методов лечения. Выяснилось, что ни для одного заболевания гомеопатия не дает большего эффекта, чем плацебо (пустышка).""",
"""Питаться ГМО опасно, потому что в них содержатся гены?""",
"""Чепуха!
Гены есть у всех животных и растений, а не только у генетически модифицированных организмов. Соответственно, молекулы ДНК, в которых содержатся гены, есть в любой пище, кроме продуктов глубокой переработки, таких как масло или сахар. Молекулы ДНК неустойчивы и легко разрушаются пищеварительными ферментами. Поэтому содержащийся в них генетический код никаким образом не может влиять на организм человека. Если бы это было иначе, мы постоянно попадали бы под влияние генов растений и животных, которыми питаемся.""",
"""В работе современных процессоров используются сверхпроводники?""",
"""Чепуха!
В процессорах современных компьютеров используются не сверхпроводники, а полупроводники. Это вещества, проводимость которых сильно зависит от приложенного электрического напряжения. Такое свойство очень удобно для создания систем управления. Сверхпроводники же — это совсем другой класс веществ, которые полностью утрачивают электрическое сопротивление при низких температурах. Их используют для создания сильных электромагнитов, а также для передачи электроэнергии без тепловых потерь."""
]
def msg_send(vk_api, user_id, message, keyboard = None):
try:
if not keyboard:
keyboard = VkKeyboard(one_time=True)
vk_api.messages.send(
user_id=user_id,
message=message,
random_id=int(round(time() * 1000)),
keyboard=keyboard.get_empty_keyboard()
)
else:
vk_api.messages.send(
user_id=user_id,
message=message,
random_id=int(round(time() * 1000)),
keyboard=keyboard.get_keyboard()
)
except Exception as e:
print(e)
def handle_start(user_id, vk_api):
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Информатики и вычислительной техники',
color=VkKeyboardColor.PRIMARY, payload=1)
keyboard.add_line()
keyboard.add_button('Машиностроительный',
color=VkKeyboardColor.PRIMARY, payload=2)
keyboard.add_button(
'Медицинский', color=VkKeyboardColor.PRIMARY, payload=3)
keyboard.add_line()
keyboard.add_button('Иностранных языков',
color=VkKeyboardColor.PRIMARY, payload=4)
keyboard.add_button('Историко-географический',
color=VkKeyboardColor.PRIMARY, payload=5)
keyboard.add_line()
keyboard.add_button('ФПМФиИТ', color=VkKeyboardColor.PRIMARY, payload=6)
keyboard.add_button('РиЧФиЖ', color=VkKeyboardColor.PRIMARY, payload=7)
keyboard.add_line()
keyboard.add_button('Радиоэлектроники и автоматики',
color=VkKeyboardColor.PRIMARY, payload=8)
keyboard.add_line()
keyboard.add_button('Управления и социальных технологий',
color=VkKeyboardColor.PRIMARY, payload=9)
keyboard.add_line()
keyboard.add_button('Химико-фармацевтический',
color=VkKeyboardColor.PRIMARY, payload=10)
keyboard.add_button('Энергетики и электротехники',
color=VkKeyboardColor.PRIMARY, payload=11)
keyboard.add_line()
keyboard.add_button(
'Строительный', color=VkKeyboardColor.PRIMARY, payload=12)
keyboard.add_button(
'Экономический', color=VkKeyboardColor.PRIMARY, payload=13)
keyboard.add_line()
keyboard.add_button('Искусств', color=VkKeyboardColor.PRIMARY, payload=14)
keyboard.add_button(
'Юридический', color=VkKeyboardColor.PRIMARY, payload=15)
msg_send(vk_api, user_id, 'Здравствуйте, Вас приветствует команда Студенческое Научное Общество. Мы подготовили небольшой квиз, по прохождению которого вы сможете поучаствовать в розыгрыше нашего мерча! \n\n Для начала выберите свой факультет', keyboard)
def handle_solution_fac(user_id, payload, vk_api):
try:
fac_id = payload
print(f"User id {user_id} fac id {fac_id}")
with open('students.txt', 'a') as fd:
fd.write(f'\nID:{user_id};FD:{fac_id};')
except:
pass
message = QUESTIONS[0]
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Чепуха', color=VkKeyboardColor.PRIMARY, payload=1)
keyboard.add_button('Факт', color=VkKeyboardColor.PRIMARY, payload=1)
msg_send(vk_api, user_id, message, keyboard)
def getQuestion(user_id, payload, vk_api):
try:
question_now_id = int(payload)
except:
message = """Что-то пошло не так, попробуйте начать заново, написав слово Начать"""
msg_send(vk_api, user_id, message)
return
message = QUESTIONS[question_now_id]
msg_send(vk_api, user_id, message)
question_next_id = question_now_id + 1
try:
message = QUESTIONS[question_next_id]
except:
# вышли за предел
message = """Тест сделан председателем факультета Информатики и вычислительной техники @sno_ivt(Алексеевой Екатериной). Подписывайтесь, там вы найдете много полезных советов по научной деятельности) Инсайдики из первых уст"""
msg_send(vk_api, user_id, message)
sleep(1)
message = """Обрабатываем результаты теста..."""
msg_send(vk_api, user_id, message)
message = """Вы прошли тест!\nПоследним этапом будет подписаться на группу @snochuvsu (Студенческое научное общество | СНО ЧувГУ). \nЖдите результатов в течение суток"""
msg_send(vk_api, user_id, message)
return
sleep(0.5)
question_next_id = question_next_id + 1
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Чепуха', color=VkKeyboardColor.PRIMARY, payload=question_next_id)
keyboard.add_button('Факт', color=VkKeyboardColor.PRIMARY, payload=question_next_id)
msg_send(vk_api, user_id, message, keyboard)
def i_dont_know(user_id, vk_api):
msg_send(vk_api, user_id, 'Хм, кажется я Вас не понял...')
# vk_session = vk.VkApi(token=TOKEN)
# vk_api = vk_session.get_api()
# longpoll = VkLongPoll(vk_session)
while True:
try:
vk_session = vk.VkApi(token=TOKEN)
vk_api = vk_session.get_api()
longpoll = VkLongPoll(vk_session)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW and event.to_me:
try:
text = event.text
text = text.lower()
except Exception as e:
print(e)
user_id = event.user_id
try:
payload = int(event.payload)
except:
payload = None
try:
if text == 'старт':
print(f"User ID: {user_id}")
handle_start(user_id, vk_api)
elif text == 'начать':
print(f"User ID: {user_id}")
handle_start(user_id, vk_api)
# elif text == 'закончить':
# handle_cancel(event, vk_api)
elif text in LIST_FACS:
handle_solution_fac(user_id, payload, vk_api)
elif text in ANSWERS:
getQuestion(user_id, payload, vk_api)
else:
i_dont_know(user_id, vk_api)
except Exception as e:
print(e)
except Exception as e:
print(e)
continue