-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
196 lines (169 loc) · 8.03 KB
/
main.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
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
import vk_api
import json
import datetime
from vk_api.longpoll import VkLongPoll, VkEventType #для отправки и получения сообщений
from vk_api.keyboard import VkKeyboard, VkKeyboardColor #нативная клавиатура
from vk_api.upload import VkUpload
#----------------------------------------------------------------------------------------------------------------------------------#
#каждый бот имеет собственный токен для общение с API vk, импортируем этот токен в тутошний файл
with open("config.json", "r") as read_file:
token = json.load(read_file)
#авторизируемся под видом бота
vk_session = vk_api.VkApi(token=token)
#необходимо для работы с сообщениями
longpoll = VkLongPoll(vk_session)
#чтобы легче обращаться к функциям апи
vk = vk_session.get_api()
#чтобы легче загружать
upload = VkUpload(vk)
#видимость клавиатуры
keyboard = VkKeyboard(one_time=True)
#все возможные сообщения, на которые бот будет отвечать
messages = ["⚠ГДЕ Я?⚠", "❓ОСТАВИТЬ ОТЗЫВ❓", "✅ПОДПИСАТЬСЯ✅", "start" ,"старт", "Начать", "📚ОТОСЛАТЬ РЕШЕНИЕ📚"]
#----------------------------------------------------------------------------------------------------------------------------------#
#прикрепление(загрузка) фотки к сообщению
def upload_photo(upload, photo):
response = upload.photo_messages(photo)[0]
owner_id = response['owner_id'] #от кого берём фото
photo_id = response['id']
access_key = response['access_key'] #к сожалению у каждой фотки бота есть свой ключик доступа
return owner_id, photo_id, access_key
#отправка фотки пользователю
def send_photo(vk, peer_id, random_id, owner_id, photo_id, access_key):
attachment = f'photo{owner_id}_{photo_id}_{access_key}'
vk.messages.send(
user_id = peer_id,
random_id = random_id,
attachment=attachment
)
#рисуем нативную клавиатуру
def create_keyboard():
keyboard.add_button('⚠ГДЕ Я?⚠', color=VkKeyboardColor.SECONDARY)
keyboard.add_button('❓ОСТАВИТЬ ОТЗЫВ❓', color=VkKeyboardColor.SECONDARY)
keyboard.add_line()
keyboard.add_button('✅ПОДПИСАТЬСЯ НА РАССЫЛКУ✅', color=VkKeyboardColor.NEGATIVE)
keyboard.add_button('📚ОТОСЛАТЬ РЕШЕНИЕ📚', color=VkKeyboardColor.NEGATIVE)
keyboard.get_keyboard()
def main():
found = False;
flag = 0 #флаг, который определяет дурачится ли пользователь вводя то, что бот не понимает или пишет отзыв про нас
create_keyboard()
#основной алгоритм
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text and event.from_user:
if event.text == messages[0]: #если написали заданную фразу
vk.messages.send(
user_id=event.user_id,
random_id=event.random_id,
message='Приветствую!👋\n\nНаше сообщество - это объединение студентов, которые хотят начать или успешно продолжить свою деятельность в научной сфере.📚\n\nВступая в группу, вы не только получаете информацию о новых интересных событиях, но и становитесь частью нашего комьюнити, где все рады вас видеть и всегда готовы помочь!💡',
keyboard = keyboard.get_keyboard()
)
send_photo(vk, event.user_id, event.random_id, *upload_photo(upload, 'HelloWorld.jpg'))
elif event.text == messages[1]:
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Напишите ваше пожелание, вопрос, жалобу!',
keyboard = keyboard.get_keyboard()
)
flag = 1
elif event.text == messages[2]:
with open("subscribers.txt", "r") as SubList:
for line in SubList:
if str((str(event.user_id) + "\n")) in line:
print(str((str(event.user_id) + "\n")))
print("\n" + line)
found = True
if not found:
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Спасибо!\nТеперь вы подписаны на рассылку!',
keyboard = keyboard.get_keyboard(),
)
with open("subscribers.txt", "a") as SubList:
SubList.write(str(event.user_id) + "\n")
with open("howmany.txt", "r") as hm:
k = int(hm.readline())
k +=1
with open("howmany.txt", "w") as hm:
hm.write(str(k))
found = False
else:
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Подождите, вы уже подписаны!',
keyboard = keyboard.get_keyboard(),
)
elif event.text == messages[3] or event.text == messages[4] or event.text == messages[5]:
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Итак, что тебе интересно?',
keyboard = keyboard.get_keyboard()
)
elif event.text == messages[6]:
flag = 2
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Пожалуйста, напишите ваше решение следующим сообщением.',
keyboard = keyboard.get_keyboard()
)
else:
if flag == 0:
#если пользователь дурачится
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Никак не пойму, что вы написали...' + datetime.datetime.now().strftime('%H:%M on %A'),
keyboard = keyboard.get_keyboard()
)
if flag == 1:
with open("messages.txt" ,"a") as FeedBack:
FeedBack.write("\n" + event.text)
flag = 0
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Спасибо за отзыв! Мы обязательно рассмотрим его.',
keyboard = keyboard.get_keyboard()
)
if flag == 2:
flag = 0
user_get=vk.users.get(user_ids = event.user_id)
user_get=user_get[0]
first_name=user_get['first_name']
last_name=user_get['last_name']
full_name=first_name+" "+last_name
full_message = full_name + " " + event.text
vk.messages.send(
user_id = event.user_id,
random_id = event.random_id,
message = 'Ваше решение принято, спасибо!',
keyboard = keyboard.get_keyboard()
)
vk.messages.send(
user_id = 612186252,
random_id = event.random_id,
message = full_message,
keyboard = keyboard.get_keyboard()
)
# attachments1 = event.attachments.get('attach1_type', False)+event.attachments.get('attach1', False)
# vk.messages.send(
# user_id= 612186252,
# random_id = event.random_id,
# message = "",
# attachment = attachments1,
# keyboard = keyboard.get_keyboard()
# )
#беседу пока не трогаю
# elif event.from_chat: #если написали в Беседе
# vk.messages.send(
# chat_id=event.chat_id,
# message='Ваш текст'
# )
#----------------------------------------------------------------------------------------------------------------------------------#
if __name__ == '__main__':
main()