Selaa lähdekoodia

Добавлено автоудаление сообщений

root 2 vuotta sitten
vanhempi
commit
a8aa213881

+ 7 - 2
handlers/admin/notifications.py

@@ -2,6 +2,7 @@
 from bot.dispatcher import bot
 import bot.config as cnf
 
+
 async def new_event():
     await bot.send_message(cnf.CHAT_ID, "Новая заявка мероприятия")
 
@@ -11,7 +12,11 @@ async def new_user():
 
 
 async def new_bug(data):
-    msg = f"❗Баг❗\n" \
-          f"Баг: {data['bug']}\n" \
+    msg = f"<b>Обратная связь</b>\n" \
+          f"Сообщение: {data['bug']}\n" \
           f"Отправитель: {data['from_user']}\n"
     await bot.send_message(cnf.CHAT_ID, msg)
+
+
+async def message_to_all(msg):
+    await bot.send_message(msg)

+ 48 - 16
handlers/start.py

@@ -1,11 +1,13 @@
+import asyncio
+
 from aiogram import types, Dispatcher
 from bot.keyboards import main_kb, register_kb,   check_register_kb
 from bot import database
 from bot import sql
 from bot.dispatcher import bot
 from aiogram.dispatcher.storage import FSMContext
-from handlers.user.states import SendBugState
-from handlers.admin.notifications import new_bug
+from handlers.user.states import SendBugState, MessageToAll
+from handlers.admin.notifications import new_bug, message_to_all
 
 
 # @dp.message_handler(commands=['start'])
@@ -18,18 +20,20 @@ async def start_cmd(message: types.Message):
     elif db.sql_fetchone(sql.check_approved(message.from_user.id)) == "0":
         await message.answer(f"Ваша заявка находится на рассмотрении", reply_markup=check_register_kb)
     else:
-        await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n"
-                             f"\n"
-                             f"Я помогу Вам запланировать мероприятие в 405 аудитории.\n\n"
-                             f"Меня еще разрабатыают по этому умею немного.\n\n"
-                             f"Вот мои функции:\n"
-                             f"Запланировать мероприятие\n"
-                             f"Мои события\n"
-                             f"Все события\n\n"
-                             f"Если есть пожелания или замечания\n"
-                             f"Можете обратиться к @FeldwebelWillman\n"
-                             f"Или воспользовтаься обратной связью /bug",
-                             reply_markup=main_kb)
+        msg = await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n"
+                                   f"\n"
+                                   f"Я помогу Вам запланировать мероприятие в 405 аудитории.\n\n"
+                                   f"Меня еще разрабатыают по этому умею немного.\n\n"
+                                   f"Вот мои функции:\n"
+                                   f"Запланировать мероприятие\n"
+                                   f"Мои события\n"
+                                   f"Все события\n\n"
+                                   f"Если есть пожелания или замечания\n"
+                                   f"Можете обратиться к @FeldwebelWillman\n"
+                                   f"Или воспользовтаься обратной связью /feedback",
+                                   reply_markup=main_kb)
+        await asyncio.sleep(10)
+        await msg.delete()
 
 
 async def stop_cmd(message: types.Message):
@@ -40,8 +44,11 @@ async def stop_cmd(message: types.Message):
 
 
 async def send_report(message: types.Message):
+    await message.delete()
     await SendBugState.send_bug.set()
-    await message.answer("Опишите проблему")
+    msg = await message.answer("Опишите проблему")
+    await asyncio.sleep(5)
+    await msg.delete()
 
 
 async def get_report(message: types.Message, state: FSMContext):
@@ -53,9 +60,34 @@ async def get_report(message: types.Message, state: FSMContext):
     await message.delete()
 
 
+async def broadcast_cmd(message: types.Message):
+    await message.delete()
+    await MessageToAll.send_message.set()
+    msg = await message.answer("Введите сооьщение которое будет отправленно всем пользователям")
+    await asyncio.sleep(5)
+    await msg.delete()
+
+
+async def get_message(message: types.Message, state: FSMContext):
+    await state.update_data(bug=message.text)
+    await state.update_data(from_user=message.from_user.username)
+    data = await state.get_data()
+    await state.finish()
+    await message_to_all(data)
+    await message.delete()
+
+
+async def delete_all_msg(message: types.Message):
+    await asyncio.sleep(5)
+    await message.delete()
+
+
 def main_register(dp: Dispatcher):
     dp.register_message_handler(start_cmd, commands=['start', 'help'])
     dp.register_message_handler(stop_cmd, commands=['stop'])
-    dp.register_message_handler(send_report, commands=['bug'])
+    dp.register_message_handler(send_report, commands=['feedback'])
     dp.register_message_handler(get_report, state=SendBugState.send_bug)
+    dp.register_message_handler(broadcast_cmd, commands=['broadcast'])
+    dp.register_message_handler(get_message, state=MessageToAll.send_message)
+    dp.register_message_handler(delete_all_msg)
 

+ 46 - 24
handlers/user/make_events.py

@@ -1,5 +1,4 @@
 import asyncio
-
 import aiogram
 from aiogram import types, Dispatcher
 from bot import database, sql
@@ -22,7 +21,9 @@ 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())
+            msg = await message.answer(messages.events_welcome(make_date()), reply_markup=make_calendar())
+            await asyncio.sleep(60)
+            await msg.delete()
 
 
 async def select_date(call: types.CallbackQuery, state: FSMContext):
@@ -35,69 +36,90 @@ async def select_date(call: types.CallbackQuery, state: FSMContext):
             await BookingState.start.set()
             await state.update_data(date=to_quotes(date))
             await state.update_data(owner=call.from_user.id)
-            await call.message.edit_text(f"Вы выбрали дату: {date}\n"
-                                         f"На этот день мероприятий не заплпнированно", reply_markup=events_kb())
+            msg = await call.message.edit_text(f"Вы выбрали дату: {date}\n"
+                                               f"На этот день мероприятий не запланированно", reply_markup=events_kb())
+            await asyncio.sleep(30)
+            await msg.delete()
         else:
             await BookingState.start.set()
             await state.update_data(date=to_quotes(date))
             await state.update_data(owner=call.from_user.id)
-            await call.message.edit_text(f"Вы выбрали дату: {date}\n\n"
-                                         f"Занятое время\n\n"
-                                         f"{beauty_booked_time(sorted(booked, key=lambda t: t['e_start'], reverse=False))}",
-                                         reply_markup=events_kb())
+            msg = await call.message.edit_text(f"Вы выбрали дату: {date}\n\n"
+                                               f"Занятое время\n\n"
+                                               f"{beauty_booked_time(sorted(booked, key=lambda t: t['e_start'], reverse=False))}",
+                                               reply_markup=events_kb())
+            await asyncio.sleep(60)
+            await msg.delete()
     else:
         msg = await call.message.answer("Нельзя выбрать дату позже сегодняшней")
-        await asyncio.sleep(4)
+        await asyncio.sleep(5)
         await msg.delete()
 
 
 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())
+    msg = 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())
     await call.message.delete()
     await state.finish()
+    await asyncio.sleep(30)
+    await msg.delete()
 
 
 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())
+    msg = 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())
     await BookingState.time.set()
+    await asyncio.sleep(20)
+    await msg.delete()
 
 
 async def get_time(message: types.Message, state: FSMContext):
     # Парсим то что ввел пользователь
     time = normalize_time(message.text)
+    await message.delete()
     # Забираем текущую дату
     date = await state.get_data()
     # Проверяем валидность времени
     if time_validator(message.text):
         # Проверяем пересечения
         if not check_overlap(time[0], time[1], date['date']):
-            await message.answer("Указанное время пеерсекается")
+            msg = await message.answer("Указанное время пеерсекается")
+            await asyncio.sleep(5)
+            await msg.delete()
         else:
             await state.update_data(t_start=time[0])
             await state.update_data(t_end=time[1])
             await BookingState.description.set()
-            await message.answer("Введите краткое описание мероприятия", reply_markup=cancel_booking())
+            msg = await message.answer("Введите краткое описание мероприятия", reply_markup=cancel_booking())
+            await asyncio.sleep(10)
+            await msg.delete()
     else:
-        await message.answer("Неверный формат времени")
+        msg = await message.answer("Неверный формат времени")
+        await asyncio.sleep(5)
+        await msg.delete()
 
 
 async def send_event(message: types.Message, state: FSMContext):
     db = database.Database()
     if len(message.text) > 100:
-        await message.answer("Описание слишком длинное")
+        msg = await message.answer("Описание слишком длинное")
+        await asyncio.sleep(5)
+        await msg.delete()
+        await message.delete()
     else:
         await state.update_data(description=message.text)
         await state.update_data(approved=0)
         data = await state.get_data()
-        await message.answer("Заявка принята", reply_markup=main_kb)
+        await message.delete()
+        msg = await message.answer("Заявка принята", reply_markup=main_kb)
+        await asyncio.sleep(5)
+        await msg.delete()
         await state.finish()
         db.sql_query_send(sql.sql_send_event(data))
         await new_event()

+ 8 - 8
handlers/user/show_events.py

@@ -6,12 +6,12 @@ from bot import sql
 
 
 async def my_events(message: types.Message):
+    await message.delete()
     db = database.Database()
-    if db.sql_fetchone(sql=sql.check_approved(message.from_user.id)) == "0" or db.sql_fetchone(sql=sql.check_id(message.from_user.id)) == "0":
+    if db.sql_fetchone(sql=sql.check_approved(message.from_user.id)) == "0" or db.sql_fetchone(
+            sql=sql.check_id(message.from_user.id)) == "0":
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    # elif db.sql_fetchone(sql=sql.check_admin(message.from_user.id)) == "0":
-    #    await message.answer("В разработке")
     else:
         data = db.sql_fetchall(sql=sql.get_user_event(message.from_user.id))
         if len(data) == 0:
@@ -21,29 +21,29 @@ async def my_events(message: types.Message):
 
 
 async def all_events(message: types.Message):
+    await message.delete()
     db = database.Database()
-    if db.sql_fetchone(sql=sql.check_approved(message.from_user.id)) == "0" or db.sql_fetchone(sql=sql.check_id(message.from_user.id)) == "0":
+    if db.sql_fetchone(sql=sql.check_approved(message.from_user.id)) == "0" or db.sql_fetchone(
+            sql=sql.check_id(message.from_user.id)) == "0":
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    # elif db.sql_fetchone(sql=sql.check_admin(message.from_user.id)) == "0":
-    #    await message.answer("В разработке")
     else:
         await message.answer("Выберете интересующий диапазон", reply_markup=events_range_kb())
 
+
 # TODO: Визуальное оформление событий
 
 
 async def select_range(call: types.CallbackQuery):
     if call.data == "today":
         db = database.Database()
-        time = "'"+str(date_range("today"))+"'"
+        time = "'" + str(date_range("today")) + "'"
         data = db.sql_fetchall(sql=sql.get_all_events(time))
         if len(data) == 0:
             await call.message.answer("Сегодня мероприятий нет")
         else:
             await call.message.answer(beauty_all_events(sorted(data, key=lambda d: d['e_date'])))
 
-
     if call.data == "week":
         db = database.Database()
         time = date_range("week").split(" ")

+ 2 - 0
handlers/user/states.py

@@ -16,3 +16,5 @@ class SendBugState(StatesGroup):
     send_bug = State()
 
 
+class MessageToAll(StatesGroup):
+    send_message = State()

+ 2 - 6
main.py

@@ -4,16 +4,12 @@ import handlers.admin.admin_menu
 import logging
 
 if __name__ == '__main__':
-    logging.basicConfig(handlers=[logging.FileHandler(filename="./log_records.txt",
-                                                      encoding='utf-8', mode='a+')],
-                        format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
-                        datefmt="%F %A %T",
-                        level=logging.DEBUG)
+    logging.basicConfig(level=logging.DEBUG)
     handlers.user.registration.register_handlers(dp)
-    handlers.start.main_register(dp)
     handlers.user.make_events.events_register(dp)
     handlers.user.show_events.register(dp)
     handlers.admin.admin_menu.register_admin_menu(dp)
     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)