浏览代码

sql вынесены в отделынй файл
Исправлено отображение сероприятий

Vildan 2 年之前
父节点
当前提交
ad38b04bcf

+ 1 - 1
bot/database.py

@@ -30,7 +30,7 @@ class Database:
     def execute(self, sql, params=None):
         return self.cursor.execute(sql, params or ())
 
-    def sql_simple_check(self, sql: str):
+    def sql_fetchone(self, sql: str):
         self.execute(sql)
         response = self.fetchone()
         if response is None:

+ 1 - 1
handlers/__init__.py

@@ -3,4 +3,4 @@ import handlers.admin.manage_users
 import handlers.admin.manage_events
 import handlers.user.registration
 import handlers.start
-import handlers.user.events
+import handlers.user.make_events

+ 6 - 6
handlers/admin/admin_menu.py

@@ -5,11 +5,11 @@ from bot import database
 
 async def enter_admin_menu(message: types.message):
     db = database.Database()
-    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    if not db.sql_fetchone(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_fetchone(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    if db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}') == "0":
+    if db.sql_fetchone(sql=f'select admin from user_table where tg_id = {message.from_user.id}') == "0":
         await message.answer("Доступ только для администраторов")
     else:
         await message.delete()
@@ -19,11 +19,11 @@ async def enter_admin_menu(message: types.message):
 
 async def exit_admin_menu(message: types.message):
     db = database.Database()
-    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    if not db.sql_fetchone(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_fetchone(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    elif not db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
+    elif not db.sql_fetchone(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
         await message.answer("Доступ только для администраторов", reply_markup=main_kb)
     else:
         await message.answer("Выход", reply_markup=main_kb)

+ 2 - 2
handlers/admin/manage_users.py

@@ -6,8 +6,8 @@ from bot.keyboards import user_manage_kb,register_kb
 
 async def list_users(message: types.Message):
     db = database.Database()
-    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    if not db.sql_fetchone(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_fetchone(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
     if not db.sql_parse_users("select id,name,phone from user_table where approved = '0'"):

+ 7 - 2
handlers/start.py

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

+ 2 - 1
handlers/user/__init__.py

@@ -1,3 +1,4 @@
 import handlers.user.registration
-import handlers.user.events
+import handlers.user.make_events
 import handlers.user.states
+import handlers.user.show_events

+ 0 - 109
handlers/user/events.py

@@ -1,109 +0,0 @@
-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
-
-
-async def make_event(message: types.message):
-    db = database.Database()
-    if not db.sql_simple_check(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(f"select approved from user_table where tg_id={message.from_user.id}"):
-        await message.delete()
-        await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    else:
-        if message.text == "🎯 Запланировать мероприятие":
-            await message.delete()
-            await message.answer(f"выберите дату чтобы увидеть список мероприятий\n\n"
-                                 f"Так же календарь мероприятий можно посмотреть в "
-                                 f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
-                                 f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
-
-
-async def select_date(call: types.CallbackQuery):
-    await call.message.answer(call.data)
-    # TODO: Планирование по дате
-
-
-async def my_events(message: types.Message):
-    db = database.Database()
-    if db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}') == "0":
-        await message.answer("В разработке")
-    elif not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
-        await message.delete()
-        await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    else:
-        data = db.sql_fetchall(sql=f"select events_table.description, user_table.name, events_table.e_date "
-                                   f"from events_table inner join user_table "
-                                   f"on events_table.owner = user_table.tg_id "
-                                   f"where events_table.owner={message.from_user.id}")
-
-        if len(data) == 0:
-            await message.answer("Вы не планировали мероприятия")
-        else:
-            await message.answer(data)
-
-
-async def all_events(message: types.Message):
-    db = database.Database()
-    if db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}') == "0":
-        await message.answer("В разработке")
-    elif not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
-        await message.delete()
-        await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    else:
-        await message.answer("Выберете интересующий диапазон", reply_markup=events_range_kb())
-
-
-async def select_range(call: types.CallbackQuery):
-    if call.data == "today":
-        db = database.Database()
-        time = "'"+str(date_range("today"))+"'"
-        data = db.sql_fetchall(sql=f"select events_table.description, user_table.name, events_table.e_date "
-                                   f"from events_table inner join user_table "
-                                   f"on events_table.owner = user_table.tg_id "
-                                   f"where events_table.e_date={time}")
-
-        if len(data) == 0:
-            await call.message.answer("Сегодня мероприятий нет")
-        else:
-            await call.message.answer(data)
-
-    if call.data == "week":
-        db = database.Database()
-        time = date_range("week").split(" ")
-        time = "'" + time[0] + "' " + time[1] + " '" + time[2] + "'"
-        data = db.sql_fetchall(sql=f"select events_table.description, user_table.name, events_table.e_date "
-                                   f"from events_table inner join user_table "
-                                   f"on events_table.owner = user_table.tg_id "
-                                   f"where events_table.e_date between {time}")
-
-        if len(data) == 0:
-            await call.message.answer("На этой неделе мероприятий нет")
-        else:
-            await call.message.answer(data)
-            print(data)
-            new_data = sorted(data,key=lambda d: d['e_date'])
-            print(new_data)
-            await call.message.answer(new_data)
-
-    if call.data == "month":
-        db = database.Database()
-        time = date_range("month").split(" ")
-        time = "'" + time[0] + "' " + time[1] + " '" + time[2] + "'"
-        data = db.sql_fetchall(sql=f"select events_table.description, user_table.name, events_table.e_date "
-                                   f"from events_table inner join user_table "
-                                   f"on events_table.owner = user_table.tg_id "
-                                   f"where events_table.e_date between {time}")
-        await call.message.answer(data)
-
-
-
-def events_register(dp: Dispatcher):
-    dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
-    dp.register_message_handler(my_events, text="🗒 Мои события")
-    dp.register_message_handler(all_events, text="📅 Все события")
-
-    dp.register_callback_query_handler(select_date, text_startswith='date_')
-    dp.register_callback_query_handler(select_range, text=(['month', 'week', 'today']))

+ 30 - 0
handlers/user/make_events.py

@@ -0,0 +1,30 @@
+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
+
+
+async def make_event(message: types.message):
+    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}"):
+        await message.delete()
+        await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
+    else:
+        if message.text == "🎯 Запланировать мероприятие":
+            await message.delete()
+            await message.answer(f"выберите дату чтобы увидеть список мероприятий\n\n"
+                                 f"Так же календарь мероприятий можно посмотреть в "
+                                 f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
+                                 f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
+
+
+async def select_date(call: types.CallbackQuery):
+    await call.message.answer(call.data)
+    # TODO: Планирование по дате
+
+
+def events_register(dp: Dispatcher):
+    dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
+    dp.register_callback_query_handler(select_date, text_startswith='date_')
+

+ 13 - 17
handlers/user/registration.py

@@ -3,15 +3,15 @@ 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
+from bot import database,sql
 
 
 async def registration(message: types.Message):
     db = database.Database()
     await message.delete()
-    if db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
+    if db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
         await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
-    elif db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
+    elif db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
         msg = await message.answer("Вы зарегистрированны", reply_markup=main_kb)
         await msg.delete()
     else:
@@ -29,6 +29,15 @@ async def registration(message: types.Message):
         await RegisterStates.phone.set()
 
 
+async def check_reg_status(message: types.Message):
+    db = database.Database()
+    await message.delete()
+    if db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
+        await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
+    elif db.sql_fetchone(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
+        await message.answer("Вы зарегистрированны", reply_markup=main_kb)
+
+
 async def get_number(message: types.Message, state: FSMContext):
     if validate_phone(message.text):
         await state.update_data(number=message.text)
@@ -57,11 +66,7 @@ async def get_fio(message: types.Message, state: FSMContext):
         await message.answer(f"Спасибо за регистрацию\n"
                              f"Вы сможете воспользоваться функциями после одобрения\n", reply_markup=check_register_kb)
 
-        db.sql_query_send(f"INSERT INTO user_table"
-                          f"(tg_id,name,phone) VALUES "
-                          f"({reg_data['id']},"
-                          f"'{reg_data['FIO']}'"
-                          f",{reg_data['number']})")
+        db.sql_query_send(sql.sql_send(reg_data))
         await state.finish()
 
 
@@ -70,15 +75,6 @@ async def reset_register(message: types.Message, state: FSMContext):
     await message.answer("Регистрация отменена", reply_markup=register_kb)
 
 
-async def check_reg_status(message: types.Message):
-    db = database.Database()
-    await message.delete()
-    if db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
-        await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
-    elif db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
-        await message.answer("Вы зарегистрированны", reply_markup=main_kb)
-
-
 def register_handlers(dp: Dispatcher):
     # хендлеры регистрации
     dp.register_message_handler(registration, text="Зарегистрироваться")

+ 68 - 0
handlers/user/show_events.py

@@ -0,0 +1,68 @@
+from bot import database
+from aiogram import types, Dispatcher
+from bot.keyboards import register_kb, events_range_kb
+from bot.functions import date_range
+from bot import sql
+
+
+async def my_events(message: types.Message):
+    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":
+        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:
+            await message.answer("Вы не планировали мероприятия")
+        else:
+            await message.answer(data)
+
+
+async def all_events(message: types.Message):
+    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":
+        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"))+"'"
+        data = db.sql_fetchall(sql=sql.get_all_events(time))
+        if len(data) == 0:
+            await call.message.answer("Сегодня мероприятий нет")
+        else:
+            await call.message.answer(data)
+
+    if call.data == "week":
+        db = database.Database()
+        time = date_range("week").split(" ")
+        time = "'" + time[0] + "' " + time[1] + " '" + time[2] + "'"
+        data = db.sql_fetchall(sql=sql.get_range_events(time))
+        if len(data) == 0:
+            await call.message.answer("На этой неделе мероприятий нет")
+        else:
+            await call.message.answer(sorted(data, key=lambda d: d['e_date']))
+
+    if call.data == "month":
+        db = database.Database()
+        time = date_range("month").split(" ")
+        time = "'" + time[0] + "' " + time[1] + " '" + time[2] + "'"
+        data = db.sql_fetchall(sql=sql.get_range_events(time))
+
+        await call.message.answer(sorted(data, key=lambda d: d['e_date']))
+
+
+def register(dp: Dispatcher):
+    dp.register_message_handler(my_events, text="🗒 Мои события")
+    dp.register_message_handler(all_events, text="📅 Все события")
+    dp.register_callback_query_handler(select_range, text=(['month', 'week', 'today']))

+ 2 - 1
main.py

@@ -7,7 +7,8 @@ if __name__ == '__main__':
     logging.basicConfig(level=logging.INFO)
     handlers.user.registration.register_handlers(dp)
     handlers.start.main_register(dp)
-    handlers.user.events.events_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)
     executor.start_polling(dp, skip_updates=True)