make_events.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from aiogram import types, Dispatcher
  2. from bot import database
  3. from bot.keyboards import register_kb, make_calendar, events_kb, cancel_booking
  4. from bot.functions import make_date
  5. from handlers.user.states import BookingState
  6. from aiogram.dispatcher.storage import FSMContext
  7. async def make_event(message: types.message):
  8. db = database.Database()
  9. if not db.sql_fetchone(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
  10. not db.sql_fetchone(f"select approved from user_table where tg_id={message.from_user.id}"):
  11. await message.delete()
  12. await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
  13. else:
  14. if message.text == "🎯 Запланировать мероприятие":
  15. await message.delete()
  16. # TODO: Добавить переход на следующий месяц
  17. await message.answer(f"выберите дату чтобы увидеть список мероприятий\n\n"
  18. f"Так же календарь мероприятий можно посмотреть в "
  19. f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
  20. f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
  21. async def select_date(call: types.CallbackQuery):
  22. db = database.Database()
  23. print(call.data)
  24. # TODO: Планирование по дате
  25. # Показать занятое время в выбраный день
  26. time = "'" + call.data.split("_")[1] + "'"
  27. booked = db.sql_fetchall(f"select events_table.e_start, events_table.e_end from events_table WHERE e_date = {time}")
  28. await BookingState.start.set()
  29. if len(booked) == 0:
  30. await call.message.edit_text("На этот день мероприятий не заплпнированно", reply_markup=events_kb())
  31. else:
  32. await call.message.edit_text(sorted(booked, key=lambda t: t['e_start'], reverse=True), reply_markup=events_kb())
  33. async def edit_date(call: types.CallbackQuery, state: FSMContext):
  34. await call.message.edit_text(f"выберите дату чтобы увидеть список мероприятий\n\n"
  35. f"Так же календарь мероприятий можно посмотреть в "
  36. f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
  37. f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
  38. print("Отменено")
  39. await state.finish()
  40. async def booking_date(call: types.CallbackQuery):
  41. print(call.message.text)
  42. await call.message.edit_text("введите время", reply_markup=cancel_booking())
  43. await BookingState.time.set()
  44. async def get_date(message: types.Message, state: FSMContext):
  45. await state.update_data(time=message.text)
  46. await message.answer("Введите краткое описание мероприятия", reply_markup=cancel_booking())
  47. await BookingState.description.set()
  48. async def send_event(message: types.Message, state: FSMContext):
  49. await state.update_data(description=message.text)
  50. data = await state.get_data()
  51. print(data)
  52. await state.finish()
  53. def events_register(dp: Dispatcher):
  54. dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
  55. dp.register_callback_query_handler(select_date, text_startswith='date_')
  56. dp.register_callback_query_handler(edit_date, text=['change', 'cancel_booking'], state=[BookingState.start,
  57. BookingState.time,
  58. BookingState.description])
  59. dp.register_callback_query_handler(booking_date, text='booking',state=BookingState.start)
  60. dp.register_message_handler(get_date, state=BookingState.time)
  61. dp.register_message_handler(send_event,state=BookingState.description)