vmshay před 2 roky
rodič
revize
852b650420
8 změnil soubory, kde provedl 48 přidání a 32 odebrání
  1. 1 0
      bot/config.py
  2. 0 1
      bot/database.py
  3. 2 2
      bot/dispatcher.py
  4. 6 7
      bot/keyboards.py
  5. 11 12
      draft.py
  6. 0 1
      handlers/admin/manage_events.py
  7. 27 8
      handlers/user/make_events.py
  8. 1 1
      main.py

+ 1 - 0
bot/config.py

@@ -7,6 +7,7 @@ env_path = '.env'
 load_dotenv(dotenv_path=env_path)
 
 BOT_TOKEN = os.getenv('BOT_TOKEN')
+BOT_TOKEN_TEST = os.getenv('BOT_TOKEN_TEST')
 DB_HOST = os.getenv('DB_HOST')
 DB_NAME = os.getenv('DB_NAME')
 DB_USER = os.getenv('DB_USER')

+ 0 - 1
bot/database.py

@@ -76,4 +76,3 @@ class Database:
                 events_list.append(event_data)
             return events_list
 
-

+ 2 - 2
bot/dispatcher.py

@@ -1,8 +1,8 @@
 from aiogram import Bot
 from aiogram.dispatcher import Dispatcher
-from bot.config import BOT_TOKEN
+from bot.config import BOT_TOKEN_TEST
 from aiogram.contrib.fsm_storage.memory import MemoryStorage
 
 
-bot = Bot(token=BOT_TOKEN, parse_mode="HTML", disable_web_page_preview=True)
+bot = Bot(token=BOT_TOKEN_TEST, parse_mode="HTML", disable_web_page_preview=True)
 dp = Dispatcher(bot, storage=MemoryStorage())

+ 6 - 7
bot/keyboards.py

@@ -78,14 +78,11 @@ def events_kb():
 
 
 # Генератор календаря
-def make_calendar():
-    current_date = datetime.date.today()
-    days_in_month = calendar.monthrange(current_date.year, current_date.month)[1]
-    month = datetime.datetime.today().month
+def make_calendar(month, days_in_month, m_prev, m_next):
+
     keyboard = InlineKeyboardMarkup(row_width=7)
-    button_today = InlineKeyboardButton(text="Сегодня", callback_data="today")
-    button_tomorrow = InlineKeyboardButton(text="Завтра", callback_data="tomorrow")
-    button_after_tomorrow = InlineKeyboardButton(text="Послезавтра", callback_data="after_tomorrow")
+    prev_month = InlineKeyboardButton(text="<<", callback_data=m_prev)
+    next_month = InlineKeyboardButton(text=">>", callback_data=m_next)
 
     for i in range(1, days_in_month+1, 1):
         if i < 10:
@@ -94,5 +91,7 @@ def make_calendar():
             day = i
         date_i = InlineKeyboardButton(text=str(i), callback_data=f"date_2022-{str(month)}-{str(day)}")
         keyboard.insert(date_i)
+
     # keyboard.add(button_today, button_tomorrow, button_after_tomorrow)
+    keyboard.add(prev_month, next_month)
     return keyboard

+ 11 - 12
draft.py

@@ -1,13 +1,12 @@
-# Черновик
-import intervaltree
-
-it = intervaltree.IntervalTree()
-it.addi('08:00', '11:00')
-it.addi('16:40', '17:50')
-it.addi('14:00', '16:30')
-
-print(f"Одно значение: {it.overlaps('10:01', '14:00')}")
-print(f"Перекрытие интервала: {it.overlaps('07:00', '12:00')}")
-print(f"Внутри интервала: {it.overlaps('15:00', '15:30')}")
-print(f"Пересекает: {it.overlaps('12:00', '13:00')}")
+import calendar
+import datetime
+
+today = datetime.date.today()
+month = today.month
+days_in_month = calendar.monthrange(today.year, month)[1]
+
+
+print(f"Дата сегодня {today}")
+print(f"Месяц {month}")
+print(f"Дней в месяце {days_in_month}")
 

+ 0 - 1
handlers/admin/manage_events.py

@@ -40,7 +40,6 @@ async def prev_event_page(call: types.CallbackQuery):
 
     events = db.sql_fetchall(sql.sql_manage_events())
     index = int(call.data.split(":")[1]) - 1
-
     if not events:
         await call.message.answer('Заявки отсутствуют')
     if index < 0:

+ 27 - 8
handlers/user/make_events.py

@@ -8,9 +8,13 @@ from aiogram.dispatcher.storage import FSMContext
 from bot import messages
 from handlers.admin.notifications import new_event
 import datetime
+import calendar
 
 
 async def make_event(message: types.message):
+    today = datetime.date.today()
+    month = today.month
+    days_in_month = calendar.monthrange(today.year, month)[1]
     db = database.Database()
     if not db.sql_fetchone(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
             not db.sql_fetchone(f"select approved from user_table where tg_id={message.from_user.id}"):
@@ -20,7 +24,11 @@ async def make_event(message: types.message):
         if message.text == "🎯 Запланировать мероприятие":
             await message.delete()
             # TODO: Добавить переход на следующий месяц
-            await message.answer(messages.events_welcome(make_date()), reply_markup=make_calendar())
+
+            await message.answer(messages.events_welcome(make_date()), reply_markup=make_calendar(month,
+                                                                                                  days_in_month,
+                                                                                                  'month_prev:0',
+                                                                                                  'month_next:0'))
             # await message.answer(messages.events_welcome(make_date()), reply_markup=make_calendar())
             # await asyncio.sleep(60)
             # await msg.delete()
@@ -60,7 +68,7 @@ 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())
+                                       f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar(month, days_in_month))
     await call.message.delete()
     await state.finish()
     # await asyncio.sleep(30)
@@ -69,11 +77,11 @@ async def edit_date(call: types.CallbackQuery, state: FSMContext):
 
 async def booking_date(call: types.CallbackQuery):
     await call.message.answer("Введите диапазон времени\n"
-                                    "Возможные форматы\n\n"
-                                    "13.00 15.30\n"
-                                    "13.00-15.30\n"
-                                    "13:00 15:30\n"
-                                    "13.00-15.30\n", reply_markup=cancel_booking())
+                              "Возможные форматы\n\n"
+                              "13.00 15.30\n"
+                              "8.00-9.00\n"
+                              "10:30 14:00\n"
+                              "11.50-12.30\n", reply_markup=cancel_booking())
     await BookingState.time.set()
     # await asyncio.sleep(20)
     # await msg.delete()
@@ -124,7 +132,7 @@ async def send_event(message: types.Message, state: FSMContext):
         data = await state.get_data()
         await message.delete()
         await message.answer("Заявка принята\n"
-                             "Уведомлять администраторов не требуется"
+                             "Уведомлять администраторов не требуется\n"
                              "они получат оповощение автоматически", reply_markup=main_kb)
         await state.finish()
         db.sql_query_send(sql.sql_send_event(data))
@@ -133,6 +141,16 @@ async def send_event(message: types.Message, state: FSMContext):
         await new_event()
 
 
+async def next_month(call: types.CallbackQuery):
+    m_id = int(call.data.split(":")[1]) + 1
+    month = datetime.date.today().month
+    month = month-m_id
+    days_in_month = calendar.monthrange(2022, month-1)[1]
+    print(month)
+    await call.message.edit_reply_markup(reply_markup=make_calendar(month, days_in_month,
+                                                                    f"month_prev:{m_id}", f"month_next:{m_id}"))
+
+
 def events_register(dp: Dispatcher):
     dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
     dp.register_callback_query_handler(select_date, text_startswith='date_')
@@ -142,3 +160,4 @@ def events_register(dp: Dispatcher):
     dp.register_callback_query_handler(booking_date, text='booking', state=BookingState.start)
     dp.register_message_handler(get_time, state=BookingState.time)
     dp.register_message_handler(send_event, state=BookingState.description)
+    dp.register_callback_query_handler(next_month, text_startswith='month_next')

+ 1 - 1
main.py

@@ -14,4 +14,4 @@ if __name__ == '__main__':
     handlers.admin.manage_users.admin_handlers(dp)
     handlers.admin.manage_events.register_handlers(dp)
     handlers.start.main_register(dp)
-    executor.start_polling(dp, skip_updates=True, on_startup=on_start)
+    executor.start_polling(dp, skip_updates=True)  # , on_startup=on_start