Files
softexpert-bot/messages/messages.py

211 lines
7.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import api
import database
from fsm import FSM
from models import iso_datetime, Message, FSMContext, InputFile
import keyboards
import re
async def start(message: Message, state: FSMContext):
await state.reset_state()
await state.reset_data()
await message.answer(
text='Здравствуйте, %s!\nЧем могу помочь?' % message.from_user.first_name,
reply_markup=keyboards.start(),
)
await FSM.start.set()
async def select_category(message: Message, state: FSMContext):
await message.answer(
text='Выберете категорию.',
reply_markup=await keyboards.categories(),
)
await FSM.select_category.set()
async def select_subcategory(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='<b>%(name)s</b>\n\n%(description)s\n\nВыберете подкатегорию.' % dict(data['category']),
parse_mode='HTML',
reply_markup=await keyboards.subcategories(data['category']),
)
await FSM.select_subcategory.set()
async def select_date(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer_photo(
photo=InputFile('./static/images/%d.%d.png' % (
data['subcategory'].category.id,
data['subcategory'].id
)),
caption='<b>%(name)s</b>\n\n%(description)s\n\nВыберете дату.' % dict(data['subcategory']),
parse_mode='HTML',
reply_markup=keyboards.dates(data['free_to_order']),
)
await FSM.select_date.set()
async def select_time_range(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='Выберете время.',
parse_mode='HTML',
reply_markup=keyboards.time_ranges(data['free_to_order'], data['date']),
)
await FSM.select_time_range.set()
async def input_email_address(message: Message, state: FSMContext):
await message.answer(
text='Введите адрес электронной почты для связи.',
parse_mode='HTML',
reply_markup=keyboards.back(),
)
await FSM.input_email_address.set()
async def input_phone_number(message: Message, state: FSMContext):
await message.answer(
text='Введите номер телефона для связи.',
parse_mode='HTML',
reply_markup=keyboards.back(),
)
await FSM.input_phone_number.set()
async def input_comment(message: Message, state: FSMContext):
await message.answer(
text='Опишите вашу проблему.',
parse_mode='HTML',
reply_markup=keyboards.back(),
)
await FSM.input_comment.set()
async def confirm_order(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='<b>Категория:</b> %s - %s.\n<b>Дата:</b> %s.\n<b>Время:</b> %s.\n<b>Адрес электронной почты:</b> %s.\n<b>Номер телефона:</b> %s.\n<b>Описание проблемы:</b>\n%s' % (
data['category'].name,
data['subcategory'].name,
data['date'].strftime('%d.%m.%Y'),
'%s - %s' % (
data['time_range'].start_time.strftime('%H:%M'),
data['time_range'].end_time.strftime('%H:%M'),
),
data['email_address'],
data['phone_number'],
data['comment'],
),
parse_mode='HTML',
reply_markup=keyboards.order_confirmation(),
)
await FSM.confirm_order.set()
async def success_sign_up(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='<b>Обращение %s успешно оформлено!</b>\nВ указанное время с вами свяжется наш специалист.\nСпасибо за обращение!' % data['issue_key'],
parse_mode='HTML',
reply_markup=keyboards.main_menu(),
)
await FSM.success_sign_up.set()
async def select_order(message: Message, state: FSMContext):
issues = await database.read_issues(message.from_user.id)
if len(issues) > 0:
await message.answer(
text='Выберете обращение.',
reply_markup=keyboards.issues(issues),
)
return await FSM.select_order.set()
await message.answer(
text='У вас нет активных обращений.',
reply_markup=keyboards.main_menu(),
)
await FSM.no_orders.set()
async def select_operation(message: Message, state: FSMContext):
data = await state.get_data()
issue = await api.read_issue(data['issue'].id)
datetime_start = re.match(iso_datetime, issue.fields.customfield_10035)
datetime_end = re.match(iso_datetime, issue.fields.customfield_10036)
await message.answer(
text='<b>Категория:</b> %s.\n<b>Дата:</b> %s.\n<b>Время:</b> %s.\n<b>Адрес электронной почты:</b> %s.\n<b>Номер телефона:</b> %s.\n<b>Описание проблемы:</b>\n%s' % (
issue.fields.customfield_10033,
'%s.%s.%s' % (
datetime_start[3],
datetime_start[2],
datetime_start[1],
),
'%s:%s - %s:%s' % (
datetime_start[4],
datetime_start[5],
datetime_end[4],
datetime_end[5],
),
issue.fields.customfield_10037,
issue.fields.customfield_10038,
issue.fields.customfield_10039,
),
parse_mode='HTML',
reply_markup=keyboards.operations(),
)
await FSM.select_operation.set()
async def reschedule_order_select_date(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='Выберете дату.',
parse_mode='HTML',
reply_markup=keyboards.dates(data['free_to_order']),
)
await FSM.reschedule_order_select_date.set()
async def reschedule_order_select_time_range(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='Выберете время.',
parse_mode='HTML',
reply_markup=keyboards.time_ranges(data['free_to_order'], data['date']),
)
await FSM.reschedule_order_select_time_range.set()
async def success_reschedule_order(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='<b>Обращение %s успешно изменено!</b>\nВ указанное время с вами свяжется наш специалист.\nСпасибо за обращение!' % data['order'].id,
parse_mode='HTML',
reply_markup=keyboards.my_orders(),
)
await FSM.success_reschedule_order.set()
async def cancel_order(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='Отменить обращение %s?' % data['issue'].key,
parse_mode='HTML',
reply_markup=keyboards.cancel_order(),
)
await FSM.cancel_order.set()
async def success_cancel_order(message: Message, state: FSMContext):
data = await state.get_data()
await message.answer(
text='Обращение %s успешно отменено!' % data['issue'].key,
parse_mode='HTML',
reply_markup=keyboards.my_orders(),
)
await FSM.success_cancel_order.set()