-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
240 lines (214 loc) · 13.1 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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
import telebot
import telebot.types as types
import utils as u
bot = telebot.TeleBot("645100799:AAHr08yGqhY8PxAjeSJSdPiUZ-D2MgcB3i8")
USERS = {}
ADMINS = []
INADMINMENU = {}
Questions = []
Questions.append(u.Question("Введите ваше имя, пожалуйста"))
Questions.append(u.Question("Выберите город доставки или введите свой вариант",
["Казань", "Бугульма", "Зеленодольск", "Альметьевск"]))
Questions.append(u.Question("Уточните улицу и дом"))
Questions.append(u.Question("Уточните время доставки", ["Утро", "День", "Вечер"]))
def send_to_admins(user):
for a in ADMINS:
msg = "Пользователь прошел опрос. Его ответы: \n"
for ans in user.answs:
msg += ans + ", "
if len(user.answs) < 1:
msg += "<Еще нет вопросов>"
bot.send_message(a, msg)
# Обработчик команд '/start' и '/imadmin'.
@bot.message_handler(commands=['start'])
def handle_start_help(message):
bot.send_message(message.from_user.id, "Здравствуйте, вас приветствует тестовый бот, "
"который поможет вам опросить клиентов. ")
markup = u.get_keyboard(["Да", "Нет"])
bot.send_message(message.from_user.id, "Вам будет задан ряд вопросов, вы готовы?", reply_markup=markup)
USERS[message.from_user.id] = u.User()
@bot.message_handler(commands=['imadmin'])
def handle_start_help(message):
bot.send_message(message.from_user.id, "Теперь вы админ этого бота и "
"будете получать информацию о пользователях прошедших опрос"
"и сможете попасть в меню управления ботом по команде /admin")
ADMINS.append(message.from_user.id)
@bot.message_handler(commands=['imnotadmin'])
def handle_start_help(message):
bot.send_message(message.from_user.id, "Теперь вы не админ этого бота")
ADMINS.remove(message.from_user.id)
@bot.message_handler(commands=['admin'])
def handle_start_help(message):
if message.from_user.id in ADMINS:
markup = u.get_keyboard(["Существующие вопросы", "Добавить вопрос", "Отмена"])
bot.send_message(message.from_user.id, "Меню администратора \n"
"(Визуальное представление меню, "
"логика и способы взаимодействия c ботом являются "
"демо-вариантами и могут быть изменены)", reply_markup=markup)
else:
bot.send_message(message.from_user.id, "Вы не администратор")
@bot.message_handler(content_types=["text"])
def handle_text(message):
uid = message.from_user.id
if message.from_user.id not in USERS:
USERS[message.from_user.id] = u.User()
if message.text == "Отмена" and uid in ADMINS:
if uid in INADMINMENU:
if INADMINMENU[uid] != '':
INADMINMENU[uid] = ''
markup = u.get_keyboard(["Существующие вопросы", "Добавить вопрос", "Отмена"])
bot.send_message(message.from_user.id, "Меню администратора \n"
"(Визуальное представление меню, "
"логика и способы взаимодействия c ботом являются "
"демо-вариантами и могут быть изменены)", reply_markup=markup)
return
bot.send_message(message.from_user.id, "Чтобы начать "
"опрос введите команду /start", reply_markup=u.get_keyboard([]))
return
if message.text == "Существующие вопросы" and uid in ADMINS:
msg = "Текущие вопросы в боте: \n\n"
print(Questions)
for i in range(0, len(Questions)):
q = Questions[i]
msg += "(№ {}) ".format(i)
msg += '{} \n Ответы: {}\n\n'.format(q.text, ", ".join(q.answers))
msg += "Для удаления вопроса отправьте его номер."
INADMINMENU[uid] = "Существующие вопросы"
markup = u.get_keyboard(["Отмена"])
print(msg)
bot.send_message(uid, msg, reply_markup=markup)
return
if message.text == "Добавить вопрос" and uid in ADMINS:
INADMINMENU[uid] = "Добавить вопрос"
msg = "Для добавления вопроса введите текст нового вопроса, " \
"затем в скобках варианты через запятую, если требуется. \n\n" \
"Пример: Введите ваш возраст (12 лет, 21 год, 45, более 50-ти)\n\n" \
"(строгие требования к написанию вопроса относятся лишь к существующему "\
"прототипу и в дальнейшем ввод вопросов будет упрощен)"
markup = u.get_keyboard(["Отмена"])
print(msg)
bot.send_message(uid, msg, reply_markup=markup)
return
if uid in INADMINMENU:
if INADMINMENU[uid] == "Существующие вопросы":
if u.isint(message.text):
id = int(message.text)
Questions.remove(Questions[id])
msg = "Вопрос удален"
bot.send_message(uid, msg)
# markup = u.get_keyboard(["/start"])
# bot.send_message(message.from_user.id, "Нажмите на кнопку старт чтоб начать "
# "опрос или введите команду /start", reply_markup=markup)
markup = u.get_keyboard(["Существующие вопросы", "Добавить вопрос", "Отмена"])
bot.send_message(message.from_user.id, "Меню администратора \n"
"(Визуальное представление меню, "
"логика и способы взаимодействия c ботом являются "
"демо-вариантами и могут быть изменены)", reply_markup=markup)
# INADMINMENU[uid] = ""
return
else:
msg = "Для удаления вопроса отправьте его номер."
bot.send_message(uid, msg)
return
if INADMINMENU[uid] == "Добавить вопрос":
try:
t = message.text
tq = t.split(' (')[0]
if len(t.split(' (')) > 1:
ta = t.split(' (')[1][:-1]
ta_arr = ta.split(', ')
if len(ta_arr[0]) > 0:
Questions.append(u.Question(tq, ta_arr))
else:
Questions.append(u.Question(tq))
else:
Questions.append(u.Question(tq))
markup = u.get_keyboard(["/start"])
bot.send_message(uid, "Вопрос добавлен", reply_markup=markup)
INADMINMENU[uid] = ""
except Exception:
bot.send_message(uid, "Пожалуйста следуйте требованиям при написании вопроса "
"(строгие требования относятся лишь к существующему "
"прототипу и в дальнейшем ввод вопросов будет упрощен)")
return
if message.text.lower() == "да":
if len(Questions) > 0:
USERS[message.from_user.id].question = Questions[0]
markup = u.get_keyboard(USERS[uid].question.answers)
bot.send_message(uid, USERS[uid].question.text, reply_markup=markup)
else:
markup = u.get_keyboard([])
bot.send_message(uid, "В боте еще не заданы вопросы", reply_markup=markup)
if len(Questions) > 1:
USERS[uid].question = Questions[1]
USERS[uid].q_index = 1
else:
USERS[uid].is_last_quest = True
return
if not USERS[uid].is_last_quest and USERS[message.from_user.id].question is not None:
USERS[uid].answs.append(message.text)
# if USERS[uid].question is None:
# USERS[uid].question = Questions[0]
# USERS[uid].q_index = 0
markup = u.get_keyboard(USERS[uid].question.answers)
bot.send_message(uid, USERS[uid].question.text, reply_markup=markup)
if len(Questions) > USERS[uid].q_index + 1:
USERS[uid].q_index += 1
USERS[uid].question = Questions[USERS[uid].q_index]
else:
USERS[uid].is_last_quest = True
return
if USERS[uid].is_last_quest:
USERS[uid].answs.append(message.text)
# markup = u.get_keyboard(["/start"])
markup = types.ReplyKeyboardRemove(selective=False)
bot.send_message(message.from_user.id, "Спасибо, за пройденный опрос", reply_markup=u.get_keyboard([]))
send_to_admins(USERS[message.from_user.id])
USERS[message.from_user.id] = u.User()
if message.text.lower() == "нет":
markup = u.get_keyboard(["/start"])
bot.send_message(message.from_user.id, "Нажмите на кнопку старт чтоб начать "
"опрос или введите команду /start", reply_markup=markup)
return
#
# elif USERS[message.from_user.id].name is None:
# USERS[message.from_user.id].name = message.text
# markup = u.get_keyboard(["Казань", "Бугульма", "Зеленодольск", "Альметьевск"])
# msg = "{}, выберите город доставки или введите свой вариант".format(USERS[message.from_user.id].name)
# bot.send_message(message.from_user.id, msg, reply_markup=markup)
#
# elif USERS[message.from_user.id].city is None:
# USERS[message.from_user.id].city = message.text
# markup = types.ReplyKeyboardRemove(selective=False)
# bot.send_message(message.from_user.id, "Уточните улицу и дом", reply_markup=markup)
#
# elif USERS[message.from_user.id].detail is None:
# USERS[message.from_user.id].detail = message.text
# markup = u.get_keyboard(["Пропустить"])
# msg = "Сообщите, пожалуйста, ваш email или вы можете пропустить этот шаг"
# bot.send_message(message.from_user.id, msg, reply_markup=markup)
#
# elif USERS[message.from_user.id].email is None:
# if message.text == "Пропустить":
# USERS[message.from_user.id].email = "Пропущено"
# elif u.is_email_valid(message.text):
# USERS[message.from_user.id].email = message.text
#
# # u.del_uid_from_dict(message.from_user.id, USERS)
# else:
# bot.send_message(message.from_user.id, "❗ Адрес электронной почты не распознан. "
# "Введите, пожалуйста, в формате example@domain.ru")
# if USERS[message.from_user.id].email is not None:
# markup = u.get_keyboard(["/start"])
# # markup = types.ReplyKeyboardRemove(selective=False)
# bot.send_message(message.from_user.id, "Спасибо, за пройденный опрос", reply_markup=markup)
# send_to_admins(USERS[message.from_user.id])
# USERS[message.from_user.id] = u.User()
# else:
# pass
#
# # Обработчик для документов и аудиофайлов
# @bot.message_handler(content_types=['document', 'audio'])
# def handle_document_audio(message):
# pass
bot.polling(none_stop=True, interval=0)