From d72363734e384229c89e1dd4bd82dac3fdf25143 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Sat, 9 Oct 2021 21:03:18 +0700 Subject: [PATCH] Add files via upload --- base.py | 3 ++ bot.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day.txt | 1 + pars.py | 47 +++++++++++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 base.py create mode 100644 bot.py create mode 100644 day.txt create mode 100644 pars.py diff --git a/base.py b/base.py new file mode 100644 index 0000000..b3945e9 --- /dev/null +++ b/base.py @@ -0,0 +1,3 @@ +TOKEN = "2080341451:AAFy8rRr6Bv4Es9qdyUiwLF3wny3278mk7o" + +GROUP_ID = "-1001652004653" \ No newline at end of file diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..42e9340 --- /dev/null +++ b/bot.py @@ -0,0 +1,99 @@ +import logging +import base, pars +import asyncio +import datetime as dt + +from aiogram import Bot, Dispatcher, executor, types + +# log level +logging.basicConfig(level=logging.INFO) + +# bot init +bot = Bot(token=base.TOKEN) +dp = Dispatcher(bot) + + +# events +@dp.message_handler(commands="today") +async def today(message: types.Message): + food = pars.eating(0) + if food: + eat = f"Питание за {'.'.join(reversed(str(dt.date.today()).split('-')))}\n\n" + for j in food: + eat = eat + "" + j + ":\n" + for i in food[j]: + eat = eat + "* " + i[0] + " [ " +\ + str(int(eval(i[1][0]))) + " г. " + str(i[1][1]) + " ккал. ]" + "\n" + eat = eat + "\n\n" + await message.answer(eat, types.ParseMode.HTML) + else: + await message.answer(f"Ошибка при выводе данных\n\nВероятнее всего, либо вы вызываете команду в " + f"воскресенье, либо же данные о меню отсутствуют", types.ParseMode.HTML) + + +@dp.message_handler(commands="tomorrow") +async def tomorrow(message: types.Message): + food = pars.eating(1) + if food: + eat = f"Питание за {'.'.join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split('-')))}\n\n" + for j in food: + eat = eat + "" + j + ":\n" + for i in food[j]: + eat = eat + "* " + i[0] + " [ " +\ + str(int(eval(i[1][0]))) + " г. " + str(i[1][1]) + " ккал. ]" + "\n" + eat = eat + "\n\n" + await message.answer(eat, types.ParseMode.HTML) + else: + await message.answer(f"Ошибка при выводе данных\n\nВероятнее всего, либо вы вызываете команду на " + f"воскресенье, либо же данные о меню отсутствуют", types.ParseMode.HTML) + + +@dp.message_handler(commands="eat") +async def vote(message: types.Message): + await bot.send_message(chat_id=base.GROUP_ID, + text=f'*{message.chat.title}* >> ' + f'[{message.from_user.first_name}](tg://user?id={message.from_user.id})\n' + f'*Заказывет:* {" ".join(message.text.split()[1:])}', + parse_mode=types.ParseMode.MARKDOWN) + + +@dp.message_handler(commands="help") +async def help(message: types.Message): + await message.answer('*Инструкция использования:*\n\n' + '*/eat {завтрак / обед / полдник}* - с помощью этой команды вы можете заказать питание\n' + '*/today* - команда выдающая меню на сегодня\n' + '*/tomorrow* - команда выдающая меню на завтра', types.ParseMode.MARKDOWN) + + +# ОТДЕЛЕНИЕ ДНЯ В ГРУППЕ +async def time(wait_for): + while True: + await asyncio.sleep(wait_for) + + hour = dt.datetime.now().hour + date = dt.datetime.now().day + wkd = dt.datetime.today().weekday() + + file = open('day.txt', 'r') + data = file.read() + file.close() + + if date != int(data) and hour == 10: + if wkd == 5: + await bot.send_message(chat_id=base.GROUP_ID, + text=f'Питание на {".".join(reversed(str(dt.date.today() + dt.timedelta(days=2)).split("-")))}', + parse_mode=types.ParseMode.HTML) + elif wkd != 6: + await bot.send_message(chat_id=base.GROUP_ID, + text=f'Питание на {".".join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split("-")))}', + parse_mode=types.ParseMode.HTML) + + file = open('day.txt', 'w') + file.write(str(date)) + file.close() + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.create_task(time(60)) # ПРОВЕРКА КАЖДУЮ МИНУТУ + executor.start_polling(dp, skip_updates=True) diff --git a/day.txt b/day.txt new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/day.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/pars.py b/pars.py new file mode 100644 index 0000000..d1e11d8 --- /dev/null +++ b/pars.py @@ -0,0 +1,47 @@ +from bs4 import BeautifulSoup +import requests as req +import datetime as dt +import openpyxl, os + + +def eating(day): + if day == 0: + wkd = dt.datetime.today().weekday() + else: + wkd = (dt.date.today() + dt.timedelta(days=1)).weekday() + + if wkd != 6: + try: + resp = req.get('http://school09.ru/vse-stati/main/food1').text + soup = BeautifulSoup(resp, "html.parser").find_all("ul", "easyfolderlisting")[0] + + food = [[str(_)[15:32], str(_)[190:200], str(_)[130:172]] for _ in soup if _ != "\n"] + if day == 0: + eat = [_[2] for _ in food if _[0] == 'A Microsoft Excel' and _[1] == str(dt.date.today())][0] + else: + eat = [_[2] for _ in food if _[0] == 'A Microsoft Excel' and _[1] == str(dt.date.today() + dt.timedelta(days=1))][0] + + file, xls = open("school_food.xlsx", "wb"), req.get(eat) + file.write(xls.content) + file.close() + + excel_file = openpyxl.load_workbook('school_food.xlsx') + employees_sheet = excel_file['Лист1'] + + food = {employees_sheet["A4"].value: [], employees_sheet["A12"].value: [], employees_sheet["A21"].value: []} + + for j in [[employees_sheet["A4"].value, 4, 7], [employees_sheet["A12"].value, 12, 8], + [employees_sheet["A21"].value, 21, 2]]: + for i in range(j[2]): + if employees_sheet[f"D{j[1] + i}"].value is None: + break + food[j[0]].append([employees_sheet[f"D{j[1] + i}"].value, + [employees_sheet[f"E{j[1] + i}"].value, employees_sheet[f"J{j[1] + i}"].value]]) + + os.remove("school_food.xlsx") + + return food + except Exception: + return False + else: + return False