Пример #1
0
def take_this_nomber(message):
	# Если пользователь нажал согласился предоставить свой телефон

	pn = message.contact.phone_number

	dbworker.set_order_state(message.chat.id, 'Phone', pn)
	# Вносит занчение контактной телефона

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота

	# Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки
	# Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря
	if dbworker.get_order_state(message.chat.id, 'Choose Edit') == 'ET_CL':

		Other_Function.user_current_reply(message)
		# Переводит на стадию подтверждения корректности заявки с измененным элементом

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
		# Обнуляет служебное значение

		return

	dbworker.set_state(message.chat.id, config.States.S_TICKET.value) # Изменяет стадию работы бота с клиентом

	msg = bot.send_message(message.chat.id, "Опишите вопрос")

	bot.register_next_step_handler(msg, user_entering_tiket)
Пример #2
0
def user_entering_contact_name(message):
	# Функция обработки контактного лица и выбора типа обратной связи

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота

	dbworker.set_order_state(message.chat.id, 'Contact Name', message.text)
	# Вносит занчение контактного лица

	# Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки
	# Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря
	if dbworker.get_order_state(message.chat.id, 'Choose Edit') == 'ET_CoN':

		Other_Function.user_current_reply(message)
		# Переводит на стадию подтверждения корректности заявки с измененным элементом

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
		# Обнуляет служебное значение

		return

	keyboard = types.InlineKeyboardMarkup()

	callback_button_EM = types.InlineKeyboardButton(text="E-mail", callback_data="CCC_Em")
	# Кнопка обратной связи через электронную почту
	callback_button_PH = types.InlineKeyboardButton(text="Телефон", callback_data="CCC_Ph")
	# Кнопка обратной связи по телефону
	callback_button_TG = types.InlineKeyboardButton(text="Telegram", callback_data="CCC_Tg")
	# Кнопка обратной связи через Telegram

	keyboard.add(callback_button_EM, callback_button_PH, callback_button_TG)

	bot.send_message(message.chat.id, "Как с Вами связаться?", reply_markup=keyboard)

	dbworker.set_state(message.chat.id, config.States.S_CHOOSE_CONTACT_CHANAL.value) # Изменяет стадию работы бота с клиентом
Пример #3
0
def user_entering_contact_email(message):

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота

	if '@' in message.text and '.' in message.text:
		# Значение электронной почты подразумевает наличие знаков @ и .

		dbworker.set_order_state(message.chat.id, 'E-mail', message.text)
		# Вносит занчение контактной электронной почты

		bot.send_message(message.chat.id, "Опишите вопрос")

		dbworker.set_state(message.chat.id, config.States.S_TICKET.value) # Изменяет стадию работы бота с клиентом

	else:

		bot.send_message(message.chat.id, "Что-то пошло не так, попробуйте еще раз ввести адресс электронной почты")
		# Посылает сообщение о не соответсвии введенных данных необходимогу типу

		return

	# Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки
	# Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря
	if dbworker.get_order_state(message.chat.id, 'Choose Edit') == 'ET_CL':

		Other_Function.user_current_reply(message)
		# Переводит на стадию подтверждения корректности заявки с измененным элементом

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
		# Обнуляет служебное значение

		return
Пример #4
0
	def user_choose_support_line(message, msg_text):

		Other_Function.delete_message(config.token, message.chat.id, message.message_id) # удаляет лишнии сообщения бота

		dbworker.set_order_state(message.chat.id, 'SupLine', msg_text)
		# вносит занчение выбранной линии поддержки

		keyboard = types.InlineKeyboardMarkup()

		callback_button_1 = types.InlineKeyboardButton(text="Менее 10", callback_data="CS_1")
		# Кнопка для значения размера компании < 10
		callback_button_2 = types.InlineKeyboardButton(text="От 10 до 100", callback_data="CS_2")
		# Кнопка для значения размера компании < 100
		callback_button_3 = types.InlineKeyboardButton(text="От 100 до 1000", callback_data="CS_3")
		# Кнопка для значения размера компании < 1000
		callback_button_4 = types.InlineKeyboardButton(text="Более 1000", callback_data="CS_4")
		# Кнопка для значения размера компании > 1000

		keyboard.add(callback_button_1, callback_button_2, callback_button_3, callback_button_4)


		bot.send_message(message.chat.id, "Укажите размер компании", reply_markup=keyboard)
		# Выводим вопрос и клавиатуру
		
		dbworker.set_state(message.chat.id, config.States.S_ENTER_COMPANY_SIZE.value) # Изменяет стадию работы бота с клиентом
Пример #5
0
	def user_choose_company_size(message, msg_text):

		Other_Function.delete_message(config.token, message.chat.id, message.message_id) # удаляет лишнии сообщения бота

		dbworker.set_order_state(message.chat.id, 'Company Size', msg_text)
		# Вносит занчение выбранного размера компании

		bot.send_message(message.chat.id, "Укажите название компании")

		dbworker.set_state(message.chat.id, config.States.S_ENTER_COMPANY_NAME.value) # Изменяет стадию работы бота с клиентом
Пример #6
0
	def order_start(message):
	# По команде /start будем заново начинаться диалог

		dbworker.set_order_state(message.chat.id, 'ChatID', message.chat.id)
		# Вносит занчение id чата в котором Клиент формирует заявку

		keyboard = Other_Function.start_messege() # Кнопки для клавиатуры получаются из функции start_messege

		bot.send_message(message.chat.id, "Привет! В какой области требуется поддержка?", reply_markup=keyboard)


		dbworker.set_state(message.chat.id, config.States.S_SUPPORT_LINE.value) # Изменяет стадию работы бота с клиентом
Пример #7
0
	def cmd_reset(message):
		# По команде /reset будем сбрасывать состояния, возвращаясь к началу диалога

		Other_Function.delete_message(config.token, message.chat.id, message.message_id) # удаляет лишнии сообщения бота

		dbworker.set_order_state(message.chat.id, 'ChatID', message.chat.id)
		# Вносит занчение id чата в котором Клиент формирует заявку

		keyboard = Other_Function.send_message() # Кнопки для клавиатуры получаются из функции start_messege

		bot.send_message(message.chat.id, "Что ж, начнём по-новой. В какой области требуется поддержка?", reply_markup=keyboard)

		dbworker.set_state(message.chat.id, config.States.S_SUPPORT_LINE.value) # Изменяет стадию работы бота с клиентом
Пример #8
0
def user_entering_tiket(message):
	# Функция обрабатывет текст заявки и переводит к подтверждению корректности составленной заявки

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота
	
	dbworker.set_order_state(message.chat.id, 'Ticket', message.text)
	# Вносит занчение теста заявки

	# Если значение Choose Edit не пустое, то оно обнуляется
	if not dbworker.get_order_state(message.chat.id, 'Choose Edit') == '':

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')

	Other_Function.user_current_reply(message) # Переводит к подтверждению корректности составленной заявки
Пример #9
0
def sup_to_client(message):
    try:

        main.set_client(message.text)

        dbworker.set_order_state(message.chat.id, 'client_id', message.text)

        bot.send_message(
            message.chat.id,
            "ВНИМАНИЕ!\n\nВсе отправленные сообщения будут пересылаться клиенту. Будьте внимательны!\nДля завершения используйте комманду /stop"
        )

        dbworker.set_state(message.chat.id,
                           config.States.F_SUPPORT_CLIENT.value)

    except:

        print(' === ' + ' ERROR IN sup_to_client' + ' === ' +
              str(message.chat.id))
Пример #10
0
def user_entering_company_name(message):
	# Фукция обработки названия компании и запроса контактного лица

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота

	dbworker.set_order_state(message.chat.id, 'Name Company', message.text)
	# Вносит занчение названия компании

	# Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки
	# Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря
	if dbworker.get_order_state(message.chat.id, 'ChatID') == 'ET_CmN':

		Other_Function.user_current_reply(message) 
		# Переводит на стадию подтверждения корректности заявки с измененным элементом

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
		# Обнуляет служебное значение

		return # Обрывает работу функции

	bot.send_message(message.chat.id, "Укажите контактное лицо")

	dbworker.set_state(message.chat.id, config.States.S_ENTER_CONTACT_NAME.value) # Изменяет стадию работы бота с клиентом
Пример #11
0
def user_entering_contact_phone(message):
	# Функция обрабатывает контактный телефон и переводит к получения текста заявки

	Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота

	# Если перешло сюда, после попатки автоматического получения телефона
	if message.text == "Использовать другой":

		bot.send_message(message.chat.id, "Введите номер без '+7'")

		return

	if not message.text.isdigit():
		# Номер телефона должен состоять только из цифр (!)

		bot.send_message(message.chat.id, "Что-то не так, попробуй ещё раз!\nНомер телефона должен состоять только из цифр.")

		return

	dbworker.set_order_state(message.chat.id, 'Phone', message.text)
	# Вносит занчение контактной телефона

	# Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки
	# Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря
	if dbworker.get_order_state(message.chat.id, 'Choose Edit') == 'ET_CL':

		Other_Function.user_current_reply(message)
		# Переводит на стадию подтверждения корректности заявки с измененным элементом

		dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
		# Обнуляет служебное значение

		return

	bot.send_message(message.chat.id, "Опишите вопрос")

	dbworker.set_state(message.chat.id, config.States.S_TICKET.value) # Изменяет стадию работы бота с клиентом
Пример #12
0
def callback_inline(call):
	# По факту реагирует на inline buttons

	if call.message:

		message = call.message
		# чтобы не заебываться и писать как во всем остальном коде

		# для входа оператора поддержки
		if call.data == 'login':

			bot.send_message(message.chat.id, "Введите личный пароль")

			dbworker.set_state(message.chat.id, config.States.F_SUPPORT_LOGIN.value)

		# для выбора кому оператор будет писать
		elif call.data == 'toClient':

			if dbworker.get_current_state(message.chat.id) == config.States.F_SUPPORT_ON.value:
				# проверяем что пишет авторизованный пользователь

				bot.send_message(message.chat.id, "Введите ID клиента")

				dbworker.set_state(message.chat.id, config.States.F_SUPPORT_SET.value)

			else:

				bot.send_message(message.chat.id, "У Вас нет доступа!")

		else:

			if message:
			# Утверждаемся что словили то что надо

				if 'ET_' in dbworker.get_order_state(message.chat.id, 'Choose Edit') and not "CCC_" in call.data:
					# Проверяем редактируется ли сейчас заявка

					getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

					if dbworker.get_order_state(message.chat.id, 'Choose Edit') == "ET_SPL":
						# Обрабатываем редактирование линии поддержки

						if call.data == "SPL_IB":

							msg = "Информационная безопасность"

						elif call.data == "SPL_BD":

							msg = "Базы данных"

						elif call.data == "SPL_C":

							msg = "Облачные системы"

						elif call.data == "SPL_O":

							msg = "Другое"

						dbworker.set_order_state(message.chat.id, 'SupLine', msg)
						# Изменяем значение линии поддержки

						getOrders.Other_Function.user_current_reply(message)
						# Спрашиваем пользователя все ли теперь верно

						dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
						# чистим служебное значение

					elif dbworker.get_order_state(message.chat.id, 'Choose Edit') == "ET_CS":

						if call.data == "CS_1":

							msg = "Менее 10"

						elif call.data == "CS_2":

							msg = "От 10 до 100"

						elif call.data == "CS_3":

							msg = "От 100 до 1000"

						elif call.data == "CS_4":

							msg = "Более 1000"

						dbworker.set_order_state(message.chat.id, 'Company Size', msg)
						# Изменяем значение размера компании

						getOrders.Other_Function.user_current_reply(message)
						# Спрашиваем пользователя все ли теперь верно

						dbworker.set_order_state(message.chat.id, 'Choose Edit', '')
						# чистим служебное значение

					elif dbworker.get_order_state(message.chat.id, 'Choose Edit') == "ET_CL":
						# Иключение для изменения линии обратной связи

						pass

				elif "SPL_" in str(call.data):
					# Обрабатываем выбранное значение линии поддержки

					if call.data == "SPL_IB":

						msg = "Информационная безопасность"

					elif call.data == "SPL_BD":

						msg = "Базы данных"

					elif call.data == "SPL_C":

						msg = "Облачные системы"

					elif call.data == "SPL_O":

						msg = "Другое"

					getOrders.Button_Function.user_choose_support_line(message, msg)
					# Переходим к слудующей стадии

				elif "CS_" in call.data:
					# Обрабатываем выбранное значение размера компании

					if call.data == "CS_1":

						msg = "Менее 10"

					elif call.data == "CS_2":

						msg = "От 10 до 100"

					elif call.data == "CS_3":

						msg = "От 100 до 1000"

					elif call.data == "CS_4":

						msg = "Более 1000"

					getOrders.Button_Function.user_choose_company_size(message, msg)
					# Переходим к слудующей стадии

				elif "CCC_" in call.data:
					# Обрабатываем выбранное значение типа обратной связи

					if call.data == "CCC_Em":

						msg = "EMAIL"

					elif call.data == "CCC_Ph":

						msg = "PHONE"

					elif call.data == "CCC_Tg":

						msg = "TG"

					else:

						pass

					getOrders.Button_Function.user_choose_contact_chanal(message, msg)
					# Переходим к слудующей стадии

				elif "UC_" in call.data:
					# Обрабатываем выбранное значение согласия Клиента с составленной заявкий

					if call.data == "UC_Y":

						msg = "YES"

					elif call.data == "UC_N":

						msg = "NO"

					getOrders.Button_Function.user_current(message, msg)
					# Переходим к слудующей стадии

				elif "CE_" in call.data:
					# Обрабатываем выбранное значение выбранного элемента для изменения

					getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id + 1) # удаляет лишнии сообщения бота
					getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

					if call.data == "CE_SPL":
						# Действия для изменения линии поддержки

						msg = "ET_SPL"

						keyboard = getOrders.Other_Function.send_message()

						bot.send_message(message.chat.id, "В какой области требуется поддержка?", reply_markup=keyboard)				

					elif call.data == "CE_CS":
						# Действия для изменения размера компании

						msg = "ET_CS"

						keyboard = types.InlineKeyboardMarkup()

						callback_button_1 = types.InlineKeyboardButton(text="Менее 10", callback_data="CS_1")
						# Кнопка для значения размера компании < 10
						callback_button_2 = types.InlineKeyboardButton(text="От 10 до 100", callback_data="CS_2")
						# Кнопка для значения размера компании < 100
						callback_button_3 = types.InlineKeyboardButton(text="От 100 до 1000", callback_data="CS_3")
						# Кнопка для значения размера компании < 1000
						callback_button_4 = types.InlineKeyboardButton(text="Более 1000", callback_data="CS_4")
						# Кнопка для значения размера компании > 1000

						keyboard.add(callback_button_1, callback_button_2, callback_button_3, callback_button_4)

						bot.send_message(message.chat.id, "Укажите размер компании", reply_markup=keyboard)

					elif call.data == "CE_CmN":
						# Действия для изменения названия компании

						msg = "ET_CmN"

						bot.send_message(message.chat.id, "Укажите название компании")

						dbworker.set_state(message.chat.id, config.States.S_ENTER_COMPANY_NAME.value) # Изменяет стадию работы бота с клиентом

					elif call.data == "CE_CoN":
						# Действия для изменения контактного лица

						msg = "ET_CoN"

						bot.send_message(message.chat.id, "Укажите контактное лицо")

						dbworker.set_state(message.chat.id, config.States.S_ENTER_CONTACT_NAME.value) # Изменяет стадию работы бота с клиентом

					elif call.data == "CE_CL":
						# Действия для изменения типа обратной связи

						msg = "ET_CL"

						keyboard = types.InlineKeyboardMarkup()

						callback_button_EM = types.InlineKeyboardButton(text="E-mail", callback_data="CCC_Em")
						# Кнопка обратной связи через электронную почту
						callback_button_PH = types.InlineKeyboardButton(text="Телефон", callback_data="CCC_Ph")
						# Кнопка обратной связи по телефону
						callback_button_TG = types.InlineKeyboardButton(text="Telegram", callback_data="CCC_Tg")
						# Кнопка обратной связи через Telegram

						keyboard.add(callback_button_EM, callback_button_PH, callback_button_TG)

						bot.send_message(message.chat.id, "Как с Вами связаться?", reply_markup=keyboard)

					elif call.data == "CE_TK":
						# Действия для изменения текста заявки

						msg = "ET_TK"

						bot.send_message(message.chat.id, "Опишите вопрос")

						dbworker.set_state(message.chat.id, config.States.S_TICKET.value)

					dbworker.set_order_state(message.chat.id, 'Choose Edit', msg)
						# Вносим служебно значение

				elif "SP_" in call.data:
					# колбеки от кнопок операторов поддержки

					if call.data == 'SP_Y':
						# заявка отправлена оператору по ИБ

						msg = message.text

						getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

						bot.send_message(config.ulahin, msg)

						bot.send_message(config.channel_id, msg + '\n\nЗаявка направлена ' + ' Уляхин А.')

					if call.data == 'SP_D':
						# заявка отправлена оператору по Cloud

						msg = message.text

						getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

						bot.send_message(config.dariy, msg)

						bot.send_message(config.channel_id, msg + '\n\nЗаявка направлена ' + 'Дарий В.')

					if call.data == 'SP_V':
						# заявка отправлена оператору по БД

						msg = message.text

						getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

						bot.send_message(config.volihina, msg)

						bot.send_message(config.channel_id, msg + '\n\nЗаявка направлена ' + 'Волыхина М.')


					if call.data == 'SP_CY':
						# оператор принял заявку

						msg = message.text

						getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

						bot.send_message(message.chat.id, msg + '\n________\nПринято!')
						
						bot.send_message(config.channel_id, msg + '\nЗаявка принял(а) ' + config.support_name(message.chat.id))
						# дублируем в общий канал, чтобы все видели и гордились

					if call.data == 'SP_RE':
						# оператор отклонил заявку

						msg = message.text

						getOrders.Other_Function.delete_message(config.token, message.chat.id, message.message_id)

						bot.send_message(message.chat.id, 'Заявка отклонена!')

						keyboard = types.InlineKeyboardMarkup()

						callback_button_SP = types.InlineKeyboardButton(text="Уляхин А.", callback_data="SP_Y") #Support first yes
						keyboard.add(callback_button_SP)
						callback_button_SP = types.InlineKeyboardButton(text="Дарий В.", callback_data="SP_D") #Support first yes
						keyboard.add(callback_button_SP)
						callback_button_SP = types.InlineKeyboardButton(text="Волыхина М.", callback_data="SP_V") #Support first yes
						keyboard.add(callback_button_SP)

						bot.send_message(config.channel_id, msg, reply_markup=keyboard)
						# отклоненные заявки уходят в общий канал
						# к ней прикрепляется кнопка, для каждого оператора поддержки
						# если ее нажать, то будет считаться что оператор принял заявку
						# отказаться он не сможет
			else:
					print(' === ' + ' ERROR IN callback' + ' === ' + str(message.chat.id))