Bladeren bron

Основа функции бпронирования

Vildan 2 jaren geleden
bovenliggende
commit
7656f4abfb
5 gewijzigde bestanden met toevoegingen van 78 en 19 verwijderingen
  1. 16 0
      bot/keyboards.py
  2. 11 8
      handlers/start.py
  3. 49 4
      handlers/user/make_events.py
  4. 1 1
      handlers/user/registration.py
  5. 1 6
      handlers/user/states.py

+ 16 - 0
bot/keyboards.py

@@ -60,6 +60,22 @@ def events_range_kb():
     keyboard.add(today_button,week_button,month_button)
     return keyboard
 
+
+def cancel_booking():
+    keyboard = InlineKeyboardMarkup()
+    cancel_button = InlineKeyboardButton(text="Отменить бронирование",callback_data="cancel_booking")
+    keyboard.add(cancel_button)
+    return keyboard
+
+
+def events_kb():
+    keyboard = InlineKeyboardMarkup()
+    booking_button = InlineKeyboardButton(text='Забронировать',callback_data="booking")
+    back_button = InlineKeyboardButton(text='Выбрать другую дату',callback_data="change")
+    keyboard.add(back_button, booking_button)
+    return keyboard
+
+
 # Генератор календаря
 def make_calendar():
     current_date = datetime.date.today()

+ 11 - 8
handlers/start.py

@@ -1,17 +1,17 @@
 from aiogram import types, Dispatcher
 from bot.keyboards import main_kb, register_kb,   check_register_kb
 from bot import database
+from bot import sql
 
 
 # @dp.message_handler(commands=['start'])
 async def start_cmd(message: types.Message):
     db = database.Database()
     await message.delete()
-    if not db.sql_fetchone(f"select tg_id from user_table where tg_id ={message.from_user.id}"):
+    if not db.sql_fetchone(sql.check_id(message.from_user.id)):
         await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n\n"
-                             "Для доступа к функциям нужно пройти простую регистрацию\n",
-                             reply_markup=register_kb)
-    elif not db.sql_fetchone(f"select approved from user_table where tg_id={message.from_user.id}"):
+                             "Для доступа к функциям нужно пройти простую регистрацию\n", reply_markup=register_kb)
+    elif not db.sql_fetchone(sql.check_approved(message.from_user.id)):
         await message.answer(f"Ваша заявка находится на рассмотрернии", reply_markup=check_register_kb)
     else:
         await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n"
@@ -27,10 +27,13 @@ async def start_cmd(message: types.Message):
                              reply_markup=main_kb)
 
 
-async def stop_bot(message: types.Message):
-    await message.answer("Выполняется остановка бота")
-    exit(0)
+async def stop_cmd(message: types.Message):
+    if message.from_user.id == 338836490:
+        await message.answer("Остановка")
+    else:
+        await message.answer("Я слушаюсь только создателя")
+
 
 def main_register(dp: Dispatcher):
     dp.register_message_handler(start_cmd, commands=['start', 'help'])
-    dp.register_message_handler(stop_bot, commands=['stop'])
+    dp.register_message_handler(stop_cmd, commands=['stop'])

+ 49 - 4
handlers/user/make_events.py

@@ -1,7 +1,9 @@
 from aiogram import types, Dispatcher
 from bot import database
-from bot.keyboards import register_kb, make_calendar, events_range_kb
-from bot.functions import make_date, date_range, beauty_all_events
+from bot.keyboards import register_kb, make_calendar, events_kb, cancel_booking
+from bot.functions import make_date
+from handlers.user.states import BookingState
+from aiogram.dispatcher.storage import FSMContext
 
 
 async def make_event(message: types.message):
@@ -13,6 +15,7 @@ async def make_event(message: types.message):
     else:
         if message.text == "🎯 Запланировать мероприятие":
             await message.delete()
+            # TODO: Добавить переход на следующий месяц
             await message.answer(f"выберите дату чтобы увидеть список мероприятий\n\n"
                                  f"Так же календарь мероприятий можно посмотреть в "
                                  f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
@@ -20,11 +23,53 @@ async def make_event(message: types.message):
 
 
 async def select_date(call: types.CallbackQuery):
-    await call.message.answer(call.data)
+    db = database.Database()
+    print(call.data)
     # TODO: Планирование по дате
+    # Показать занятое время в выбраный день
+    time = "'" + call.data.split("_")[1] + "'"
+    booked = db.sql_fetchall(f"select events_table.e_start, events_table.e_end from events_table WHERE e_date = {time}")
+    await BookingState.start.set()
+    if len(booked) == 0:
+        await call.message.edit_text("На этот день мероприятий не заплпнированно", reply_markup=events_kb())
+    else:
+        await call.message.edit_text(sorted(booked, key=lambda t: t['e_start'], reverse=True), reply_markup=events_kb())
+
+
+async def edit_date(call: types.CallbackQuery, state: FSMContext):
+    await call.message.edit_text(f"выберите дату чтобы увидеть список мероприятий\n\n"
+                                 f"Так же календарь мероприятий можно посмотреть в "
+                                 f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
+                                 f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
+    print("Отменено")
+    await state.finish()
+
+
+async def booking_date(call: types.CallbackQuery):
+    print(call.message.text)
+    await call.message.edit_text("введите время", reply_markup=cancel_booking())
+    await BookingState.time.set()
+
+
+async def get_date(message: types.Message, state: FSMContext):
+    await state.update_data(time=message.text)
+    await message.answer("Введите краткое описание мероприятия", reply_markup=cancel_booking())
+    await BookingState.description.set()
+
+
+async def send_event(message: types.Message, state: FSMContext):
+    await state.update_data(description=message.text)
+    data = await state.get_data()
+    print(data)
+    await state.finish()
 
 
 def events_register(dp: Dispatcher):
     dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
     dp.register_callback_query_handler(select_date, text_startswith='date_')
-
+    dp.register_callback_query_handler(edit_date, text=['change', 'cancel_booking'], state=[BookingState.start,
+                                                                                            BookingState.time,
+                                                                                            BookingState.description])
+    dp.register_callback_query_handler(booking_date, text='booking',state=BookingState.start)
+    dp.register_message_handler(get_date, state=BookingState.time)
+    dp.register_message_handler(send_event,state=BookingState.description)

+ 1 - 1
handlers/user/registration.py

@@ -3,7 +3,7 @@ from handlers.user.states import RegisterStates
 from bot.functions import validate_fio, validate_phone, reject_latin, reject_cmd
 from aiogram.dispatcher.storage import FSMContext
 from bot.keyboards import reset_register_kb, register_kb, main_kb, check_register_kb
-from bot import database,sql
+from bot import database, sql
 
 
 async def registration(message: types.Message):

+ 1 - 6
handlers/user/states.py

@@ -7,13 +7,8 @@ class RegisterStates(StatesGroup):
 
 
 class BookingState(StatesGroup):
-    owner = State()
+    start = State()
     time = State()
     description = State()
-    group = State()
-    persons = State()
 
 
-class DateRangeState(StatesGroup):
-    date = State()
-