mirror of
https://github.com/EDeev/school_menu.git
synced 2026-10-07 20:49:36 +03:00
Переводы строк приведены к LF
This commit is contained in:
parent
60c523de1c
commit
ac866d7df1
4 changed files with 494 additions and 492 deletions
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
* text=auto eol=lf
|
||||||
|
*.db binary
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
TOKEN = "token from BotFather"
|
TOKEN = "token from BotFather"
|
||||||
|
|
||||||
ID_BOT = **********
|
ID_BOT = **********
|
||||||
TEX_GROUP = "-*********"
|
TEX_GROUP = "-*********"
|
||||||
|
|
|
||||||
872
code/bot.py
872
code/bot.py
|
|
@ -1,436 +1,436 @@
|
||||||
import logging, asyncio, random, pymorphy2
|
import logging, asyncio, random, pymorphy2
|
||||||
import base, pars, sql, os
|
import base, pars, sql, os
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
|
|
||||||
from aiogram import Bot, Dispatcher, executor, types
|
from aiogram import Bot, Dispatcher, executor, types
|
||||||
|
|
||||||
# log level
|
# log level
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
morph = pymorphy2.MorphAnalyzer()
|
morph = pymorphy2.MorphAnalyzer()
|
||||||
|
|
||||||
# bot init
|
# bot init
|
||||||
bot = Bot(token=base.TOKEN)
|
bot = Bot(token=base.TOKEN)
|
||||||
dp = Dispatcher(bot)
|
dp = Dispatcher(bot)
|
||||||
|
|
||||||
# create now.db
|
# create now.db
|
||||||
file = open('../db/now.db', 'w+')
|
file = open('../db/now.db', 'w+')
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
# db init
|
# db init
|
||||||
db = sql.Base('../db/base.db')
|
db = sql.Base('../db/base.db')
|
||||||
du = sql.User('../db/users.db')
|
du = sql.User('../db/users.db')
|
||||||
dg = sql.Group('../db/groups.db')
|
dg = sql.Group('../db/groups.db')
|
||||||
dn = sql.Now('../db/now.db')
|
dn = sql.Now('../db/now.db')
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands="start")
|
@dp.message_handler(commands="start")
|
||||||
async def start(message: types.Message):
|
async def start(message: types.Message):
|
||||||
if 0 < int(message.chat.id):
|
if 0 < int(message.chat.id):
|
||||||
await message.answer("Ghdbtn", types.ParseMode.MARKDOWN)
|
await message.answer("Ghdbtn", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
# ОБНОВЛЕНИЕ АЙДИ ГРУППЫ
|
# ОБНОВЛЕНИЕ АЙДИ ГРУППЫ
|
||||||
@dp.message_handler(content_types=['migrate_to_chat_id', 'migrate_from_chat_id'])
|
@dp.message_handler(content_types=['migrate_to_chat_id', 'migrate_from_chat_id'])
|
||||||
async def chat_reload(message: types.Message):
|
async def chat_reload(message: types.Message):
|
||||||
if du.group_exists(message.migrate_from_chat_id):
|
if du.group_exists(message.migrate_from_chat_id):
|
||||||
du.update_group_id(message.migrate_from_chat_id, message.migrate_to_chat_id)
|
du.update_group_id(message.migrate_from_chat_id, message.migrate_to_chat_id)
|
||||||
|
|
||||||
|
|
||||||
# КОМАНДЫ
|
# КОМАНДЫ
|
||||||
@dp.message_handler(commands="help")
|
@dp.message_handler(commands="help")
|
||||||
async def hlp(message: types.Message):
|
async def hlp(message: types.Message):
|
||||||
if 0 < int(message.chat.id):
|
if 0 < int(message.chat.id):
|
||||||
await message.answer("*Инструкция использования:*\n\n"
|
await message.answer("*Инструкция использования:*\n\n"
|
||||||
"*/eat* - с помощью этой команды вы можете заказать питание\n"
|
"*/eat* - с помощью этой команды вы можете заказать питание\n"
|
||||||
"*/today* - команда выдающая меню на сегодня\n"
|
"*/today* - команда выдающая меню на сегодня\n"
|
||||||
"*/tomorrow* - команда выдающая меню на завтра\n\n"
|
"*/tomorrow* - команда выдающая меню на завтра\n\n"
|
||||||
"*/add_group* - команда выдающая меню на завтра\n"
|
"*/add_group* - команда выдающая меню на завтра\n"
|
||||||
"*/del_group* - команда выдающая меню на завтра\n", types.ParseMode.MARKDOWN)
|
"*/del_group* - команда выдающая меню на завтра\n", types.ParseMode.MARKDOWN)
|
||||||
else:
|
else:
|
||||||
await message.answer("*Инструкция использования:*\n\n"
|
await message.answer("*Инструкция использования:*\n\n"
|
||||||
"*/eat* - с помощью этой команды вы можете заказать питание\n"
|
"*/eat* - с помощью этой команды вы можете заказать питание\n"
|
||||||
"*/today* - команда выдающая меню на сегодня\n"
|
"*/today* - команда выдающая меню на сегодня\n"
|
||||||
"*/tomorrow* - команда выдающая меню на завтра\n", types.ParseMode.MARKDOWN)
|
"*/tomorrow* - команда выдающая меню на завтра\n", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands="stat")
|
@dp.message_handler(commands="stat")
|
||||||
async def stat(message: types.Message):
|
async def stat(message: types.Message):
|
||||||
if 0 > int(message.chat.id):
|
if 0 > int(message.chat.id):
|
||||||
group_id = message.chat.id
|
group_id = message.chat.id
|
||||||
if du.group_exists(group_id):
|
if du.group_exists(group_id):
|
||||||
group_id = du.get_group_id(group_id)
|
group_id = du.get_group_id(group_id)
|
||||||
if db.main_group_exists(group_id):
|
if db.main_group_exists(group_id):
|
||||||
overall = db.stat_group(group_id)
|
overall = db.stat_group(group_id)
|
||||||
all_users = dg.stat_all_users(group_id)
|
all_users = dg.stat_all_users(group_id)
|
||||||
|
|
||||||
z = [[user[1], user[0]] for user in all_users if user[1] != 0]
|
z = [[user[1], user[0]] for user in all_users if user[1] != 0]
|
||||||
o = [[user[2], user[0]] for user in all_users if user[2] != 0]
|
o = [[user[2], user[0]] for user in all_users if user[2] != 0]
|
||||||
p = [[user[3], user[0]] for user in all_users if user[3] != 0]
|
p = [[user[3], user[0]] for user in all_users if user[3] != 0]
|
||||||
|
|
||||||
txt = f"<i><b>Всего было сделано заказов - {sum(overall)}</b></i>\n"
|
txt = f"<i><b>Всего было сделано заказов - {sum(overall)}</b></i>\n"
|
||||||
line = morph.parse('заказ')[0]
|
line = morph.parse('заказ')[0]
|
||||||
|
|
||||||
lst = [[f"\n\t<b>* Завтраков - {str(overall[0])}</b>\n", z], [f"\n\t<b>* Обедов - {str(overall[1])}</b>\n", o],
|
lst = [[f"\n\t<b>* Завтраков - {str(overall[0])}</b>\n", z], [f"\n\t<b>* Обедов - {str(overall[1])}</b>\n", o],
|
||||||
[f"\n\t<b>* Полдников - {str(overall[2])}</b>\n", p]]
|
[f"\n\t<b>* Полдников - {str(overall[2])}</b>\n", p]]
|
||||||
for i in lst:
|
for i in lst:
|
||||||
txt = txt + i[0]
|
txt = txt + i[0]
|
||||||
if i[1]:
|
if i[1]:
|
||||||
for n, j in enumerate(i[1][:3]):
|
for n, j in enumerate(i[1][:3]):
|
||||||
txt = txt + "\t\t\t<b>" + str(n + 1) + ". " + j[1] + "</b> " + str(j[0]) + " " + line.make_agree_with_number(j[0]).word + "\n"
|
txt = txt + "\t\t\t<b>" + str(n + 1) + ". " + j[1] + "</b> " + str(j[0]) + " " + line.make_agree_with_number(j[0]).word + "\n"
|
||||||
|
|
||||||
await message.answer(txt, types.ParseMode.HTML)
|
await message.answer(txt, types.ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
await message.answer("Ваша группа не зарегистрирована!")
|
await message.answer("Ваша группа не зарегистрирована!")
|
||||||
else:
|
else:
|
||||||
await message.answer("Ваша группа не зарегистрирована!")
|
await message.answer("Ваша группа не зарегистрирована!")
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands="eat")
|
@dp.message_handler(commands="eat")
|
||||||
async def eat(message: types.Message):
|
async def eat(message: types.Message):
|
||||||
if 0 > int(message.chat.id):
|
if 0 > int(message.chat.id):
|
||||||
keyboard1 = {"inline_keyboard":
|
keyboard1 = {"inline_keyboard":
|
||||||
[[{"text": "Завтрак", "callback_data": "z"}, {"text": "Обед", "callback_data": "o"},
|
[[{"text": "Завтрак", "callback_data": "z"}, {"text": "Обед", "callback_data": "o"},
|
||||||
{"text": "Полдник", "callback_data": "p"}], [{"text": "Завтрак / Обед", "callback_data": "zo"}],
|
{"text": "Полдник", "callback_data": "p"}], [{"text": "Завтрак / Обед", "callback_data": "zo"}],
|
||||||
[{"text": "Завтрак / Полдник", "callback_data": "zp"}],
|
[{"text": "Завтрак / Полдник", "callback_data": "zp"}],
|
||||||
[{"text": "Обед / Полдник", "callback_data": "op"}],
|
[{"text": "Обед / Полдник", "callback_data": "op"}],
|
||||||
[{"text": "Завтрак / Обед / Полдник", "callback_data": "zop"}]]}
|
[{"text": "Завтрак / Обед / Полдник", "callback_data": "zop"}]]}
|
||||||
|
|
||||||
await bot.send_message(chat_id=message.chat.id,
|
await bot.send_message(chat_id=message.chat.id,
|
||||||
text='*Это меню выбора притания!* Всё, что вам надо сделать, это лишь выбрать '
|
text='*Это меню выбора притания!* Всё, что вам надо сделать, это лишь выбрать '
|
||||||
'необходимый заказ.\n\nEсли после нажатия бот написал, что вы выбрали, то всё '
|
'необходимый заказ.\n\nEсли после нажатия бот написал, что вы выбрали, то всё '
|
||||||
'прошло успешно и вы можете не беспокоиться!', parse_mode=types.ParseMode.MARKDOWN,
|
'прошло успешно и вы можете не беспокоиться!', parse_mode=types.ParseMode.MARKDOWN,
|
||||||
reply_markup=keyboard1)
|
reply_markup=keyboard1)
|
||||||
|
|
||||||
keyboard2 = {"inline_keyboard": [[{"text": "Отменить заказ", "callback_data": "cancel"}]]}
|
keyboard2 = {"inline_keyboard": [[{"text": "Отменить заказ", "callback_data": "cancel"}]]}
|
||||||
await bot.send_message(chat_id=message.chat.id,
|
await bot.send_message(chat_id=message.chat.id,
|
||||||
text='Если вы хотите сменить заказ, то отмените действующий заказ по кнопке ниже и '
|
text='Если вы хотите сменить заказ, то отмените действующий заказ по кнопке ниже и '
|
||||||
'закажите заново!', parse_mode=types.ParseMode.MARKDOWN,
|
'закажите заново!', parse_mode=types.ParseMode.MARKDOWN,
|
||||||
reply_markup=keyboard2)
|
reply_markup=keyboard2)
|
||||||
else:
|
else:
|
||||||
await message.answer("Эта команда доступна к использованию *только в чатах*", types.ParseMode.MARKDOWN)
|
await message.answer("Эта команда доступна к использованию *только в чатах*", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands="del_group")
|
@dp.message_handler(commands="del_group")
|
||||||
async def delg(message: types.Message):
|
async def delg(message: types.Message):
|
||||||
if 0 < int(message.chat.id):
|
if 0 < int(message.chat.id):
|
||||||
user_id = message.from_user.id
|
user_id = message.from_user.id
|
||||||
if du.user_exists(user_id):
|
if du.user_exists(user_id):
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
if db.user_main_exists(user_id):
|
if db.user_main_exists(user_id):
|
||||||
keyboard = {"inline_keyboard": [[{"text": "Подтвердить удаление", "callback_data": "del"}]]}
|
keyboard = {"inline_keyboard": [[{"text": "Подтвердить удаление", "callback_data": "del"}]]}
|
||||||
await bot.send_message(chat_id=message.chat.id,
|
await bot.send_message(chat_id=message.chat.id,
|
||||||
text='Вы точно хотите удалить статистику и связку групп?',
|
text='Вы точно хотите удалить статистику и связку групп?',
|
||||||
parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
||||||
else:
|
else:
|
||||||
await message.answer("У вас нет связки групп для их удаления!")
|
await message.answer("У вас нет связки групп для их удаления!")
|
||||||
else:
|
else:
|
||||||
await message.answer("У вас нет связки групп для их удаления!")
|
await message.answer("У вас нет связки групп для их удаления!")
|
||||||
else:
|
else:
|
||||||
await message.answer("Эта команда доступна к использованию *только в личном чате*", types.ParseMode.MARKDOWN)
|
await message.answer("Эта команда доступна к использованию *только в личном чате*", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands="add_group")
|
@dp.message_handler(commands="add_group")
|
||||||
async def addg(message: types.Message):
|
async def addg(message: types.Message):
|
||||||
if 0 < int(message.chat.id):
|
if 0 < int(message.chat.id):
|
||||||
user_id = message.from_user.id
|
user_id = message.from_user.id
|
||||||
flag = False
|
flag = False
|
||||||
|
|
||||||
if not du.user_exists(user_id):
|
if not du.user_exists(user_id):
|
||||||
du.add_user(user_id)
|
du.add_user(user_id)
|
||||||
|
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
all_cods = db.all_cods()
|
all_cods = db.all_cods()
|
||||||
|
|
||||||
cod1 = random.randint(1000, 9999)
|
cod1 = random.randint(1000, 9999)
|
||||||
while cod1 in all_cods[0]:
|
while cod1 in all_cods[0]:
|
||||||
cod1 = random.randint(1000, 9999)
|
cod1 = random.randint(1000, 9999)
|
||||||
|
|
||||||
cod2 = random.randint(1000, 9999)
|
cod2 = random.randint(1000, 9999)
|
||||||
while cod2 in all_cods[1]:
|
while cod2 in all_cods[1]:
|
||||||
cod2 = random.randint(1000, 9999)
|
cod2 = random.randint(1000, 9999)
|
||||||
|
|
||||||
db.add_user_tranzit(user_id, cod1, cod2)
|
db.add_user_tranzit(user_id, cod1, cod2)
|
||||||
await message.answer(f"Введите этот код в группе с учениками - *{str(cod1)}*, а этот в личной для "
|
await message.answer(f"Введите этот код в группе с учениками - *{str(cod1)}*, а этот в личной для "
|
||||||
f"фиксации заказа - *{str(cod2)}*", types.ParseMode.MARKDOWN)
|
f"фиксации заказа - *{str(cod2)}*", types.ParseMode.MARKDOWN)
|
||||||
flag = True
|
flag = True
|
||||||
else:
|
else:
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
if db.user_tranzit_exists(user_id):
|
if db.user_tranzit_exists(user_id):
|
||||||
cods = db.get_cods(user_id)
|
cods = db.get_cods(user_id)
|
||||||
await message.answer(f"Введите этот код в основной группе с учениками - *{str(cods[0])}*, а этот в "
|
await message.answer(f"Введите этот код в основной группе с учениками - *{str(cods[0])}*, а этот в "
|
||||||
f"личной для фиксации заказа - *{str(cods[1])}*", types.ParseMode.MARKDOWN)
|
f"личной для фиксации заказа - *{str(cods[1])}*", types.ParseMode.MARKDOWN)
|
||||||
flag = True
|
flag = True
|
||||||
else:
|
else:
|
||||||
if not db.user_main_exists(user_id):
|
if not db.user_main_exists(user_id):
|
||||||
all_cods = db.all_cods()
|
all_cods = db.all_cods()
|
||||||
|
|
||||||
cod1 = random.randint(1000, 9999)
|
cod1 = random.randint(1000, 9999)
|
||||||
while cod1 in all_cods[0]:
|
while cod1 in all_cods[0]:
|
||||||
cod1 = random.randint(1000, 9999)
|
cod1 = random.randint(1000, 9999)
|
||||||
|
|
||||||
cod2 = random.randint(1000, 9999)
|
cod2 = random.randint(1000, 9999)
|
||||||
while cod2 in all_cods[1]:
|
while cod2 in all_cods[1]:
|
||||||
cod2 = random.randint(1000, 9999)
|
cod2 = random.randint(1000, 9999)
|
||||||
|
|
||||||
db.add_user_tranzit(user_id, cod1, cod2)
|
db.add_user_tranzit(user_id, cod1, cod2)
|
||||||
await message.answer(f"Введите этот код в группе с учениками - *{str(cod1)}*, а этот в личной для "
|
await message.answer(f"Введите этот код в группе с учениками - *{str(cod1)}*, а этот в личной для "
|
||||||
f"фиксации заказа - *{str(cod2)}*", types.ParseMode.MARKDOWN)
|
f"фиксации заказа - *{str(cod2)}*", types.ParseMode.MARKDOWN)
|
||||||
flag = True
|
flag = True
|
||||||
else:
|
else:
|
||||||
await message.answer("У вас уже есть связка группы, вам надо её удалить, прежде чем верифицировать "
|
await message.answer("У вас уже есть связка группы, вам надо её удалить, прежде чем верифицировать "
|
||||||
"новую!", types.ParseMode.MARKDOWN)
|
"новую!", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
if flag:
|
if flag:
|
||||||
keyboard = {"inline_keyboard": [[{"text": "Отменить верификацию", "callback_data": "cnl"}]]}
|
keyboard = {"inline_keyboard": [[{"text": "Отменить верификацию", "callback_data": "cnl"}]]}
|
||||||
await bot.send_message(chat_id=message.chat.id,
|
await bot.send_message(chat_id=message.chat.id,
|
||||||
text='*Вы можете отменить заявку* если не хотите связывать группы для сбора '
|
text='*Вы можете отменить заявку* если не хотите связывать группы для сбора '
|
||||||
'заказов питания!', parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
'заказов питания!', parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
||||||
else:
|
else:
|
||||||
await message.answer("Эта команда доступна к использованию *только в личном чате*", types.ParseMode.MARKDOWN)
|
await message.answer("Эта команда доступна к использованию *только в личном чате*", types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands=["today", "tomorrow"])
|
@dp.message_handler(commands=["today", "tomorrow"])
|
||||||
async def todtom(message: types.Message):
|
async def todtom(message: types.Message):
|
||||||
food = pars.eating(0 if "today" in message.text else 1)
|
food = pars.eating(0 if "today" in message.text else 1)
|
||||||
if food[0]:
|
if food[0]:
|
||||||
food = food[1]
|
food = food[1]
|
||||||
|
|
||||||
if "today" in message.text:
|
if "today" in message.text:
|
||||||
et = f"<b>Питание за {'.'.join(reversed(str(dt.date.today()).split('-')))}</b>\n\n"
|
et = f"<b>Питание за {'.'.join(reversed(str(dt.date.today()).split('-')))}</b>\n\n"
|
||||||
else:
|
else:
|
||||||
et = f"<b>Питание за {'.'.join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split('-')))}</b>\n\n"
|
et = f"<b>Питание за {'.'.join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split('-')))}</b>\n\n"
|
||||||
|
|
||||||
for j in food:
|
for j in food:
|
||||||
et = et + "<i><b>" + str(j) + ":</b></i>\n"
|
et = et + "<i><b>" + str(j) + ":</b></i>\n"
|
||||||
for i in food[j]:
|
for i in food[j]:
|
||||||
et = et + "<b>* " + str(i[0]) + "</b> <i>[ "
|
et = et + "<b>* " + str(i[0]) + "</b> <i>[ "
|
||||||
et = et + str(i[1][0]) + " г. " + str(i[1][1]) + " ккал. ]</i>" + "\n"
|
et = et + str(i[1][0]) + " г. " + str(i[1][1]) + " ккал. ]</i>" + "\n"
|
||||||
et = et + "\n\n"
|
et = et + "\n\n"
|
||||||
|
|
||||||
await message.answer(et, types.ParseMode.HTML)
|
await message.answer(et, types.ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
if food[1]:
|
if food[1]:
|
||||||
await message.answer(f"<b>Ошибка в системе бота!</b>\n\nОна будет в скором времени исправлена...",
|
await message.answer(f"<b>Ошибка в системе бота!</b>\n\nОна будет в скором времени исправлена...",
|
||||||
types.ParseMode.HTML)
|
types.ParseMode.HTML)
|
||||||
await bot.send_message(chat_id=base.TEX_GROUP, text=f"<b>[ {str(dt.datetime.now())[:-10]} ]</b> "
|
await bot.send_message(chat_id=base.TEX_GROUP, text=f"<b>[ {str(dt.datetime.now())[:-10]} ]</b> "
|
||||||
f"<b><i>=></i></b> <i>{food[3]}</i> (ошибка в системе)",
|
f"<b><i>=></i></b> <i>{food[3]}</i> (ошибка в системе)",
|
||||||
parse_mode=types.ParseMode.HTML)
|
parse_mode=types.ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
if food[2] != 6:
|
if food[2] != 6:
|
||||||
await message.answer(f"<b>Нет данных по питанию!</b>\n\nКак только данные появятся вы сможете "
|
await message.answer(f"<b>Нет данных по питанию!</b>\n\nКак только данные появятся вы сможете "
|
||||||
f"их получить этой же командой!", types.ParseMode.HTML)
|
f"их получить этой же командой!", types.ParseMode.HTML)
|
||||||
await bot.send_message(chat_id=base.TEX_GROUP, text=f"<b>[ {str(dt.datetime.now())[:-10]} ]</b> "
|
await bot.send_message(chat_id=base.TEX_GROUP, text=f"<b>[ {str(dt.datetime.now())[:-10]} ]</b> "
|
||||||
f"<b><i>=></i></b> <i>{food[3]}</i> (нет данных по "
|
f"<b><i>=></i></b> <i>{food[3]}</i> (нет данных по "
|
||||||
f"питанию)", parse_mode=types.ParseMode.HTML)
|
f"питанию)", parse_mode=types.ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
await message.answer(f"<b>Вы вызывете команду в воскресенье!</b>\n\nНа что вы надеетесь?",
|
await message.answer(f"<b>Вы вызывете команду в воскресенье!</b>\n\nНа что вы надеетесь?",
|
||||||
types.ParseMode.HTML)
|
types.ParseMode.HTML)
|
||||||
|
|
||||||
|
|
||||||
# ИЛАЙН КЛАВИАТУРА
|
# ИЛАЙН КЛАВИАТУРА
|
||||||
@dp.callback_query_handler(text=["z", "o", "p", "zo", "zp", "op", "zop"])
|
@dp.callback_query_handler(text=["z", "o", "p", "zo", "zp", "op", "zop"])
|
||||||
async def var(call: types.CallbackQuery):
|
async def var(call: types.CallbackQuery):
|
||||||
et = {"z": "завтрак", "o": "обед", "p": "полдник", "zo": "завтрак / обед", "zp": "завтрак / полдник",
|
et = {"z": "завтрак", "o": "обед", "p": "полдник", "zo": "завтрак / обед", "zp": "завтрак / полдник",
|
||||||
"op": "обед / полдник", "zop": "завтрак / обед / полдник"}
|
"op": "обед / полдник", "zop": "завтрак / обед / полдник"}
|
||||||
|
|
||||||
group_id = call.message.chat.id
|
group_id = call.message.chat.id
|
||||||
if du.group_exists(group_id):
|
if du.group_exists(group_id):
|
||||||
group_id = du.get_group_id(group_id)
|
group_id = du.get_group_id(group_id)
|
||||||
if db.main_group_exists(group_id):
|
if db.main_group_exists(group_id):
|
||||||
user_id = call.from_user.id
|
user_id = call.from_user.id
|
||||||
if du.user_exists(user_id):
|
if du.user_exists(user_id):
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
else:
|
else:
|
||||||
du.add_user(user_id)
|
du.add_user(user_id)
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
|
|
||||||
if db.check_group_inproc(group_id):
|
if db.check_group_inproc(group_id):
|
||||||
if not dn.check_user(group_id, user_id):
|
if not dn.check_user(group_id, user_id):
|
||||||
flag = True
|
flag = True
|
||||||
else:
|
else:
|
||||||
await call.message.answer(f"{call.from_user.first_name}, вы уже сделали заказ! Отмените его с "
|
await call.message.answer(f"{call.from_user.first_name}, вы уже сделали заказ! Отмените его с "
|
||||||
f"помощью кнопки отмены!")
|
f"помощью кнопки отмены!")
|
||||||
flag = False
|
flag = False
|
||||||
else:
|
else:
|
||||||
dn.created_group(group_id)
|
dn.created_group(group_id)
|
||||||
db.add_group(group_id)
|
db.add_group(group_id)
|
||||||
flag = True
|
flag = True
|
||||||
|
|
||||||
if flag:
|
if flag:
|
||||||
for i in str(call.data):
|
for i in str(call.data):
|
||||||
db.upd_stat_group(group_id, i, 1)
|
db.upd_stat_group(group_id, i, 1)
|
||||||
dg.upd_stat_user(group_id, user_id, i, 1)
|
dg.upd_stat_user(group_id, user_id, i, 1)
|
||||||
|
|
||||||
ids = db.get_spec_group(group_id)
|
ids = db.get_spec_group(group_id)
|
||||||
msg1 = await bot.send_message(chat_id=str(du.get_first_group_id(ids)),
|
msg1 = await bot.send_message(chat_id=str(du.get_first_group_id(ids)),
|
||||||
text=f'[{call.from_user.first_name}](tg://user?id={call.from_user.id}) >> '
|
text=f'[{call.from_user.first_name}](tg://user?id={call.from_user.id}) >> '
|
||||||
f'*{et[call.data].title()}*', parse_mode=types.ParseMode.MARKDOWN)
|
f'*{et[call.data].title()}*', parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
msg2 = await call.message.answer(text=f'{call.from_user.first_name}, всё принято, вы заказили - '
|
msg2 = await call.message.answer(text=f'{call.from_user.first_name}, всё принято, вы заказили - '
|
||||||
f'*{"и".join(et[call.data].split("/"))}*',
|
f'*{"и".join(et[call.data].split("/"))}*',
|
||||||
parse_mode=types.ParseMode.MARKDOWN)
|
parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
dn.add_user(group_id, user_id, msg2.message_id, msg1.message_id, str(call.data))
|
dn.add_user(group_id, user_id, msg2.message_id, msg1.message_id, str(call.data))
|
||||||
else:
|
else:
|
||||||
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
||||||
'дополнительным для отправки списка!')
|
'дополнительным для отправки списка!')
|
||||||
else:
|
else:
|
||||||
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
||||||
'дополнительным для отправки списка!')
|
'дополнительным для отправки списка!')
|
||||||
|
|
||||||
|
|
||||||
@dp.callback_query_handler(text=["cnl"])
|
@dp.callback_query_handler(text=["cnl"])
|
||||||
async def cnl(call: types.CallbackQuery):
|
async def cnl(call: types.CallbackQuery):
|
||||||
user_id = du.get_user_id(call.from_user.id)
|
user_id = du.get_user_id(call.from_user.id)
|
||||||
if db.user_tranzit_exists(user_id):
|
if db.user_tranzit_exists(user_id):
|
||||||
db.delete_tranzit(user_id)
|
db.delete_tranzit(user_id)
|
||||||
await call.message.answer('<b>Заявка удалена!</b> Если ещё захотите связать группы, то зановой вызовите '
|
await call.message.answer('<b>Заявка удалена!</b> Если ещё захотите связать группы, то зановой вызовите '
|
||||||
'команду <b>/add_group</b>', types.ParseMode.HTML)
|
'команду <b>/add_group</b>', types.ParseMode.HTML)
|
||||||
else:
|
else:
|
||||||
await call.message.answer('У вас нет оставленных заявок!')
|
await call.message.answer('У вас нет оставленных заявок!')
|
||||||
|
|
||||||
|
|
||||||
@dp.callback_query_handler(text=["del"])
|
@dp.callback_query_handler(text=["del"])
|
||||||
async def ver_del(call: types.CallbackQuery):
|
async def ver_del(call: types.CallbackQuery):
|
||||||
user_id = du.get_user_id(call.from_user.id)
|
user_id = du.get_user_id(call.from_user.id)
|
||||||
if db.user_main_exists(user_id):
|
if db.user_main_exists(user_id):
|
||||||
ids = db.get_main_group(user_id)
|
ids = db.get_main_group(user_id)
|
||||||
db.delete_main_group(user_id)
|
db.delete_main_group(user_id)
|
||||||
dg.delete_group(str(ids))
|
dg.delete_group(str(ids))
|
||||||
db.del_group(str(ids))
|
db.del_group(str(ids))
|
||||||
await call.message.answer('Всё успешно удалено!')
|
await call.message.answer('Всё успешно удалено!')
|
||||||
else:
|
else:
|
||||||
await call.message.answer("У вас нет связки групп для их удаления!")
|
await call.message.answer("У вас нет связки групп для их удаления!")
|
||||||
|
|
||||||
|
|
||||||
@dp.callback_query_handler(text=["cancel"])
|
@dp.callback_query_handler(text=["cancel"])
|
||||||
async def cancel(call: types.CallbackQuery):
|
async def cancel(call: types.CallbackQuery):
|
||||||
group_id = call.message.chat.id
|
group_id = call.message.chat.id
|
||||||
if du.group_exists(group_id):
|
if du.group_exists(group_id):
|
||||||
main_group_id = group_id
|
main_group_id = group_id
|
||||||
group_id = du.get_group_id(group_id)
|
group_id = du.get_group_id(group_id)
|
||||||
if db.main_group_exists(group_id):
|
if db.main_group_exists(group_id):
|
||||||
user_id = call.from_user.id
|
user_id = call.from_user.id
|
||||||
if du.user_exists(user_id):
|
if du.user_exists(user_id):
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
else:
|
else:
|
||||||
du.add_user(user_id)
|
du.add_user(user_id)
|
||||||
user_id = du.get_user_id(user_id)
|
user_id = du.get_user_id(user_id)
|
||||||
|
|
||||||
if db.check_group_inproc(group_id):
|
if db.check_group_inproc(group_id):
|
||||||
if dn.check_user(group_id, user_id):
|
if dn.check_user(group_id, user_id):
|
||||||
ord_id = dn.get_ord_id(group_id, user_id)
|
ord_id = dn.get_ord_id(group_id, user_id)
|
||||||
|
|
||||||
for i in ord_id:
|
for i in ord_id:
|
||||||
db.upd_stat_group(group_id, i, -1)
|
db.upd_stat_group(group_id, i, -1)
|
||||||
dg.upd_stat_user(group_id, user_id, i, -1)
|
dg.upd_stat_user(group_id, user_id, i, -1)
|
||||||
|
|
||||||
ids = db.get_spec_group(group_id)
|
ids = db.get_spec_group(group_id)
|
||||||
set_group_id = str(du.get_first_group_id(ids))
|
set_group_id = str(du.get_first_group_id(ids))
|
||||||
|
|
||||||
main, sett = dn.get_message(group_id, user_id)
|
main, sett = dn.get_message(group_id, user_id)
|
||||||
await bot.delete_message(chat_id=main_group_id, message_id=main)
|
await bot.delete_message(chat_id=main_group_id, message_id=main)
|
||||||
await bot.delete_message(chat_id=set_group_id, message_id=sett)
|
await bot.delete_message(chat_id=set_group_id, message_id=sett)
|
||||||
|
|
||||||
dn.del_user(group_id, user_id)
|
dn.del_user(group_id, user_id)
|
||||||
await call.message.answer(f"{call.from_user.first_name}, ваш заказ отменён!")
|
await call.message.answer(f"{call.from_user.first_name}, ваш заказ отменён!")
|
||||||
else:
|
else:
|
||||||
await call.message.answer(f"{call.from_user.first_name}, у вас нет заказа!")
|
await call.message.answer(f"{call.from_user.first_name}, у вас нет заказа!")
|
||||||
else:
|
else:
|
||||||
await call.message.answer(f"{call.from_user.first_name}, у вас нет заказа!")
|
await call.message.answer(f"{call.from_user.first_name}, у вас нет заказа!")
|
||||||
else:
|
else:
|
||||||
await call.message.answer('Вы ещё не можете использовать бота, завершите процедуру регистрации!')
|
await call.message.answer('Вы ещё не можете использовать бота, завершите процедуру регистрации!')
|
||||||
else:
|
else:
|
||||||
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
await call.message.answer('Вы должны через личные сообщения зарегистрировать этот чат у бота вместе с '
|
||||||
'дополнительным для отправки списка!')
|
'дополнительным для отправки списка!')
|
||||||
|
|
||||||
|
|
||||||
# ТРЕКЕР НОВЫХ ПОЛЬЗОВАТЕЛЕЙ
|
# ТРЕКЕР НОВЫХ ПОЛЬЗОВАТЕЛЕЙ
|
||||||
@dp.message_handler(content_types=["text", "audio", "document", "photo", "sticker", "video",
|
@dp.message_handler(content_types=["text", "audio", "document", "photo", "sticker", "video",
|
||||||
"video_note", "voice", "location", "contact"])
|
"video_note", "voice", "location", "contact"])
|
||||||
async def check(message: types.Message):
|
async def check(message: types.Message):
|
||||||
if 0 > int(message.chat.id):
|
if 0 > int(message.chat.id):
|
||||||
if du.user_exists(message.from_user.id):
|
if du.user_exists(message.from_user.id):
|
||||||
user_id = du.get_user_id(message.from_user.id)
|
user_id = du.get_user_id(message.from_user.id)
|
||||||
if db.user_tranzit_exists(user_id) and len(message.text) == 4:
|
if db.user_tranzit_exists(user_id) and len(message.text) == 4:
|
||||||
cods = db.get_cods(user_id)
|
cods = db.get_cods(user_id)
|
||||||
|
|
||||||
flag = False
|
flag = False
|
||||||
|
|
||||||
if not du.group_exists(message.chat.id):
|
if not du.group_exists(message.chat.id):
|
||||||
if message.text == str(cods[0]):
|
if message.text == str(cods[0]):
|
||||||
du.add_group(message.chat.id)
|
du.add_group(message.chat.id)
|
||||||
group_id = du.get_group_id(message.chat.id)
|
group_id = du.get_group_id(message.chat.id)
|
||||||
db.add_main_group(user_id, group_id)
|
db.add_main_group(user_id, group_id)
|
||||||
flag = True
|
flag = True
|
||||||
elif message.text == str(cods[1]):
|
elif message.text == str(cods[1]):
|
||||||
du.add_group(message.chat.id)
|
du.add_group(message.chat.id)
|
||||||
group_id = du.get_group_id(message.chat.id)
|
group_id = du.get_group_id(message.chat.id)
|
||||||
db.add_set_group(user_id, group_id)
|
db.add_set_group(user_id, group_id)
|
||||||
flag = True
|
flag = True
|
||||||
else:
|
else:
|
||||||
group_id = du.get_group_id(message.chat.id)
|
group_id = du.get_group_id(message.chat.id)
|
||||||
if not db.main_group_exists(group_id):
|
if not db.main_group_exists(group_id):
|
||||||
if message.text == str(cods[0]):
|
if message.text == str(cods[0]):
|
||||||
db.add_main_group(user_id, group_id)
|
db.add_main_group(user_id, group_id)
|
||||||
flag = True
|
flag = True
|
||||||
elif message.text == str(cods[1]):
|
elif message.text == str(cods[1]):
|
||||||
db.add_set_group(user_id, group_id)
|
db.add_set_group(user_id, group_id)
|
||||||
flag = True
|
flag = True
|
||||||
|
|
||||||
if flag and db.user_tranzit(user_id):
|
if flag and db.user_tranzit(user_id):
|
||||||
ids = db.get_groups_ids(user_id)
|
ids = db.get_groups_ids(user_id)
|
||||||
db.add_active_groups(user_id, ids[0], ids[1])
|
db.add_active_groups(user_id, ids[0], ids[1])
|
||||||
db.delete_tranzit(user_id)
|
db.delete_tranzit(user_id)
|
||||||
dg.created_group(ids[0])
|
dg.created_group(ids[0])
|
||||||
dg.add_user(ids[0], user_id, message.from_user.first_name)
|
dg.add_user(ids[0], user_id, message.from_user.first_name)
|
||||||
else:
|
else:
|
||||||
if du.group_exists(message.chat.id):
|
if du.group_exists(message.chat.id):
|
||||||
group_id = du.get_group_id(message.chat.id)
|
group_id = du.get_group_id(message.chat.id)
|
||||||
if db.main_group_exists(group_id):
|
if db.main_group_exists(group_id):
|
||||||
dg.update_name(user_id, message.from_user.first_name, group_id)
|
dg.update_name(user_id, message.from_user.first_name, group_id)
|
||||||
else:
|
else:
|
||||||
if du.group_exists(message.chat.id):
|
if du.group_exists(message.chat.id):
|
||||||
group_id = du.get_group_id(message.chat.id)
|
group_id = du.get_group_id(message.chat.id)
|
||||||
if db.main_group_exists(group_id):
|
if db.main_group_exists(group_id):
|
||||||
du.add_user(message.from_user.id)
|
du.add_user(message.from_user.id)
|
||||||
user_id = du.get_user_id(message.from_user.id)
|
user_id = du.get_user_id(message.from_user.id)
|
||||||
dg.add_user(group_id, user_id, message.from_user.first_name)
|
dg.add_user(group_id, user_id, message.from_user.first_name)
|
||||||
|
|
||||||
|
|
||||||
# ОТДЕЛЕНИЕ ДНЯ В ГРУППЕ
|
# ОТДЕЛЕНИЕ ДНЯ В ГРУППЕ
|
||||||
async def time(wait_for):
|
async def time(wait_for):
|
||||||
while True:
|
while True:
|
||||||
await asyncio.sleep(wait_for)
|
await asyncio.sleep(wait_for)
|
||||||
|
|
||||||
hour = dt.datetime.now().hour
|
hour = dt.datetime.now().hour
|
||||||
date = dt.datetime.now().day
|
date = dt.datetime.now().day
|
||||||
wkd = dt.datetime.today().weekday()
|
wkd = dt.datetime.today().weekday()
|
||||||
|
|
||||||
data = db.get_day()
|
data = db.get_day()
|
||||||
|
|
||||||
if date != data and hour == 6:
|
if date != data and hour == 6:
|
||||||
for ids in db.get_spec_groups():
|
for ids in db.get_spec_groups():
|
||||||
group = du.get_first_group_id(ids[0])
|
group = du.get_first_group_id(ids[0])
|
||||||
|
|
||||||
if wkd == 5:
|
if wkd == 5:
|
||||||
dat = ".".join(reversed(str(dt.date.today() + dt.timedelta(days=2)).split("-")))
|
dat = ".".join(reversed(str(dt.date.today() + dt.timedelta(days=2)).split("-")))
|
||||||
await bot.send_message(chat_id=group, text=f'<b>Питание на {dat}</b>',
|
await bot.send_message(chat_id=group, text=f'<b>Питание на {dat}</b>',
|
||||||
parse_mode=types.ParseMode.HTML)
|
parse_mode=types.ParseMode.HTML)
|
||||||
elif wkd != 6:
|
elif wkd != 6:
|
||||||
dat = ".".join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split("-")))
|
dat = ".".join(reversed(str(dt.date.today() + dt.timedelta(days=1)).split("-")))
|
||||||
await bot.send_message(chat_id=group, text=f'<b>Питание на {dat}</b>',
|
await bot.send_message(chat_id=group, text=f'<b>Питание на {dat}</b>',
|
||||||
parse_mode=types.ParseMode.HTML)
|
parse_mode=types.ParseMode.HTML)
|
||||||
|
|
||||||
db.update_day(date)
|
db.update_day(date)
|
||||||
db.reset_proc()
|
db.reset_proc()
|
||||||
|
|
||||||
os.remove('../db/now.db')
|
os.remove('../db/now.db')
|
||||||
fle = open('../db/now.db', 'w+')
|
fle = open('../db/now.db', 'w+')
|
||||||
fle.close()
|
fle.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.create_task(time(600)) # ПРОВЕРКА КАЖДЫЕ 10 МИНУТ
|
loop.create_task(time(600)) # ПРОВЕРКА КАЖДЫЕ 10 МИНУТ
|
||||||
executor.start_polling(dp, skip_updates=True)
|
executor.start_polling(dp, skip_updates=True)
|
||||||
|
|
|
||||||
104
code/pars.py
104
code/pars.py
|
|
@ -1,52 +1,52 @@
|
||||||
import requests as req
|
import requests as req
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import openpyxl, os, re
|
import openpyxl, os, re
|
||||||
|
|
||||||
|
|
||||||
def eating(day):
|
def eating(day):
|
||||||
if day == 0:
|
if day == 0:
|
||||||
wkd = dt.datetime.today().weekday()
|
wkd = dt.datetime.today().weekday()
|
||||||
else:
|
else:
|
||||||
wkd = (dt.date.today() + dt.timedelta(days=1)).weekday()
|
wkd = (dt.date.today() + dt.timedelta(days=1)).weekday()
|
||||||
|
|
||||||
if wkd != 6:
|
if wkd != 6:
|
||||||
flag = False
|
flag = False
|
||||||
try:
|
try:
|
||||||
if day == 0:
|
if day == 0:
|
||||||
eat = f"https://www.school01.ru/food/{str(dt.date.today())}-sm.xlsx"
|
eat = f"https://www.school01.ru/food/{str(dt.date.today())}-sm.xlsx"
|
||||||
else:
|
else:
|
||||||
eat = f"https://www.school01.ru/food/{str(dt.date.today() + dt.timedelta(days=1))}-sm.xlsx"
|
eat = f"https://www.school01.ru/food/{str(dt.date.today() + dt.timedelta(days=1))}-sm.xlsx"
|
||||||
|
|
||||||
file, xls = open("school_food.xlsx", "wb"), req.get(eat)
|
file, xls = open("school_food.xlsx", "wb"), req.get(eat)
|
||||||
file.write(xls.content)
|
file.write(xls.content)
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
excel_file = openpyxl.load_workbook('school_food.xlsx')
|
excel_file = openpyxl.load_workbook('school_food.xlsx')
|
||||||
employees_sheet = excel_file[excel_file.sheetnames[0]]
|
employees_sheet = excel_file[excel_file.sheetnames[0]]
|
||||||
|
|
||||||
food = {employees_sheet["A4"].value: [], employees_sheet["A12"].value: []}
|
food = {employees_sheet["A4"].value: [], employees_sheet["A12"].value: []}
|
||||||
food_info = [[employees_sheet["A4"].value, 4, 8], [employees_sheet["A12"].value, 12, 9]]
|
food_info = [[employees_sheet["A4"].value, 4, 8], [employees_sheet["A12"].value, 12, 9]]
|
||||||
|
|
||||||
flag = True
|
flag = True
|
||||||
|
|
||||||
if employees_sheet["A22"].value is not None:
|
if employees_sheet["A22"].value is not None:
|
||||||
food[employees_sheet["A22"].value] = []
|
food[employees_sheet["A22"].value] = []
|
||||||
food_info.append([employees_sheet["A22"].value, 21, 2])
|
food_info.append([employees_sheet["A22"].value, 21, 2])
|
||||||
|
|
||||||
for j in food_info:
|
for j in food_info:
|
||||||
for i in range(j[2]):
|
for i in range(j[2]):
|
||||||
if employees_sheet[f"D{j[1] + i}"].value is None:
|
if employees_sheet[f"D{j[1] + i}"].value is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
gramm = str(int(eval(str(employees_sheet[f"E{j[1] + i}"].value).strip())))
|
gramm = str(int(eval(str(employees_sheet[f"E{j[1] + i}"].value).strip())))
|
||||||
kkal = str(eval("".join(str(employees_sheet[f"J{j[1] + i}"].value).split()).replace(",", ".", 1)))
|
kkal = str(eval("".join(str(employees_sheet[f"J{j[1] + i}"].value).split()).replace(",", ".", 1)))
|
||||||
|
|
||||||
food[j[0]].append([employees_sheet[f"D{j[1] + i}"].value, [gramm, kkal]])
|
food[j[0]].append([employees_sheet[f"D{j[1] + i}"].value, [gramm, kkal]])
|
||||||
|
|
||||||
os.remove("school_food.xlsx")
|
os.remove("school_food.xlsx")
|
||||||
|
|
||||||
return [True, food]
|
return [True, food]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return [False, flag, wkd, repr(e)]
|
return [False, flag, wkd, repr(e)]
|
||||||
else:
|
else:
|
||||||
return [False, False, wkd]
|
return [False, False, wkd]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue