Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update before 3.0 release #23

Merged
merged 6 commits into from
Apr 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions Course_1/Telegram_Bot/Buttons/Add_Maintenance/source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
from ..__modules__ import *


async def add_homework_state(call: types.CallbackQuery):
start_date = datetime.now()
await SelfState.Add_state.set()
await bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=f"*Выберите предмет*",
parse_mode="markdown",
reply_markup=create_subjects_keyboard(get_group_schedule(get_user_group(call.message), start=start_date))
)


async def add_homework(message: types.Message, state: FSMContext):
try:
async with state.proxy() as data:
date = data['date']
subject = data['subject']
data['state'] = False
except KeyError:
await message.answer(text='Ну ладно 🥺', parse_mode='markdown')
await state.finish()
return Ellipsis

if HDB.is_exists(subject_name=subject, date=date, group=get_user_group(message)):
await message.reply(text='*Мы уже записывали задание на этот день и на этот предмет :)*', parse_mode='markdown')
await state.finish()
return Ellipsis

text = message.text
Debugger.info(message.from_user.username, 'добавил', text if text is not None else message.caption)
user_group = get_user_group(message)
exercise = text
if message.document is not None and message.document.file_id is not None:
await SelfState.Parse_state.set()
HDB.attach_file(date=date, filename=message.document.file_id, group=user_group)
exercise = message.caption if message.caption is not None else exercise
elif message.photo and message.photo[0] is not None:
await SelfState.Parse_state.set()
HDB.attach_file(date=date, filename=message.photo[0].file_id, group=user_group)
exercise = message.caption if message.caption is not None else exercise
else:
await state.finish()
if exercise is not None:
await message.answer(
text='*{}*'.format(
HDB.add_homework(
subject_name=subject,
date=date,
text=exercise,
username=message.from_user.username,
group=user_group)), parse_mode='markdown')
try:
await bot.delete_message(message.chat.id, message_id=message.message_id - 1)
except MessageToDeleteNotFound:
Debugger.error('Какое-то сообщение не удаляется(')


async def parse_attachments(message: types.Message, state: FSMContext):
async with state.proxy() as data:
date = data['date']
HDB.attach_file(date=date, filename=message.document.file_id, group=get_user_group(message))


async def adding_add_homework_subject(query: types.CallbackQuery, state: FSMContext):
try:
async with state.proxy() as data:
data['subject'] = query.conf
date_count = data['date_count']
data["state"] = True

schedule = get_group_schedule(group=get_user_group(query.message), start=week_definition(date_count, debug=True))
transliterated_schedule = list(map(
lambda x: translit(x, language_code='ru', reversed=True), schedule))
subject = None
for pos, let in enumerate(transliterated_schedule):
if query.data in let:
subject = schedule[pos]
if subject is None:
async with state.proxy() as data:
subject = data['subject']

async with state.proxy() as data:
data['subject'] = subject
start_date, end_date = week_definition(date_count)
await bot.edit_message_text(
chat_id=query.message.chat.id,
message_id=query.message.message_id,
text=f'*На какой день задание?\n📅 {start_date} - {end_date} 📅*',
reply_markup=Inline_Date_ADD,
parse_mode='markdown')
except KeyError as e:
Debugger.error(e)


async def add_homework_date(query: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
current_state = data['state']
date_count = data['date_count']
if current_state:
day = query.data.split("_")[2]
start_date = week_definition(date_count, debug=True)
await bot.edit_message_text(
text='*Введите домашнее задание*',
chat_id=query.message.chat.id,
message_id=query.message.message_id,
parse_mode='markdown'
)
async with state.proxy() as data:
data['date'] = (start_date + timedelta(days=days[day])).strftime('%d.%m.%Y')
await SelfState.Add_state.set()
66 changes: 66 additions & 0 deletions Course_1/Telegram_Bot/Buttons/Delete_Maintenance/source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from Buttons.__modules__ import *


async def delete_homework_date(query: types.CallbackQuery, state: FSMContext):
day = query.data.split("_")[2]
async with state.proxy() as data:
date_count = data['date_count']
start_date = week_definition(date_count, debug=True)
data['date'] = (start_date + timedelta(days=days[day])).strftime('%d.%m.%Y')
date = data["date"]
start_date, end_date = week_definition(date_count, debug=True), week_definition(date_count)[1]
start_date = start_date.strftime('%d.%m.%Y')
homework = HDB.is_available_homework_by_date(date=date, group=get_user_group(query.message), data=True)
homework = list(map(lambda x: x[0], homework))
await bot.edit_message_text(
text='*Выберите предмет*' if homework else '*Тут ничего нет :(\nДавай выберем другой день лучше?*',
chat_id=query.message.chat.id,
message_id=query.message.message_id,
parse_mode='markdown',
reply_markup=create_subjects_keyboard(homework) if homework else None
)
await asyncio.sleep(0.5)
if not homework:
await bot.send_message(
chat_id=query.message.chat.id,
text=f"*На какой день задание?\n📅 {start_date} - {end_date} 📅*",
reply_markup=Inline_Date_ADD,
parse_mode="markdown"
)


async def delete_homework(query: types.CallbackQuery, state: FSMContext):
message = query.message
async with state.proxy() as data:
date = data['date']
date_count = data['date_count']
schedule = get_group_schedule(group=get_user_group(query.message), start=week_definition(date_count, debug=True))
transliterated_schedule = list(map(
lambda x: translit(x, language_code='ru', reversed=True), schedule))
subject = None
for pos, let in enumerate(transliterated_schedule):
if query.data in let:
subject = schedule[pos]
break
group = get_user_group(message)
Debugger.info(message.from_user.username, 'удалил', ' '.join([subject, date, group]))
HDB.delete_homework(subject_name=subject, date=date, group=group)
await bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
await message.answer(
text=f'*Запись успешно удалена!*', parse_mode='markdown')
await state.finish()


async def delete_homework_state(query: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
data['state'] = True
date_count = data['date_count']
start_date, end_date = week_definition(date_count)
await bot.edit_message_text(
chat_id=query.message.chat.id,
message_id=query.message.message_id,
text=f"*На какой день задание?\n📅 {start_date} - {end_date} 📅*",
reply_markup=Inline_Date_ADD,
parse_mode="markdown"
)
await SelfState.Delete_state.set()
91 changes: 91 additions & 0 deletions Course_1/Telegram_Bot/Buttons/Edit_Maintenance/source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
from Buttons.__modules__ import *


async def editor_homework_date(query: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
current_state = data['state']
date_count = data['date_count']
if current_state:
day = query.data.split("_")[2]

start_date, end_date = week_definition(date_count, debug=True), week_definition(date_count)[1]
async with state.proxy() as data:
data['date'] = (start_date + timedelta(days=days[day])).strftime('%d.%m.%Y')
date = data["date"]
start_date = start_date.strftime('%d.%m.%Y')
homework = HDB.is_available_homework_by_date(date=date, group=get_user_group(query.message), data=True)
homework = list(map(lambda x: x[0], homework))
await bot.edit_message_text(
text='*Выберите предмет*' if homework else '*Тут ничего нет :(\nДавай выберем другой день лучше?*',
chat_id=query.message.chat.id,
message_id=query.message.message_id,
parse_mode='markdown',
reply_markup=create_subjects_keyboard(homework) if homework else None
)
await asyncio.sleep(0.5)
if not homework:
await bot.send_message(
chat_id=query.message.chat.id,
text=f"*На какой день задание?\n📅 {start_date} - {end_date} 📅*",
reply_markup=Inline_Date_ADD,
parse_mode="markdown"
)


async def edit_homework(message: types.Message, state: FSMContext):
text = message.text
async with state.proxy() as data:
date = data['date']
subject = data['subject']
Debugger.info(message.from_user.username, 'отредактировал', text)
HDB.delete_homework(subject_name=subject, date=date, group=get_user_group(message))
text = HDB.add_homework(
subject_name=subject,
username=message.from_user.username,
text=text, date=date,
group=get_user_group(message),
edit=True)
await message.answer(
text=f'*{text}*', parse_mode='markdown')
await state.finish()


async def edit_init(call: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
data['state'] = True
date_count = data['date_count']
start_date, end_date = week_definition(date_count)
await bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=f"*На какой день задание?\n📅 {start_date} - {end_date} 📅*",
reply_markup=Inline_Date_ADD,
parse_mode="markdown"
)
await SelfState.Edit_state.set()


async def editor_add_homework_subject(query: types.CallbackQuery, state: FSMContext):
try:
async with state.proxy() as data:
data['subject'] = query.conf
date_count = data['date_count']
data["state"] = True

schedule = get_group_schedule(group=get_user_group(query.message), start=week_definition(date_count, debug=True))
transliterated_schedule = list(map(
lambda x: translit(x, language_code='ru', reversed=True), schedule))
subject = None
for pos, let in enumerate(transliterated_schedule):
if query.data in let:
subject = schedule[pos]
break
async with state.proxy() as data:
data['subject'] = subject
await bot.edit_message_text(
chat_id=query.message.chat.id,
message_id=query.message.message_id,
text=f'*Введите новое задание*',
parse_mode='markdown')
except KeyError as e:
Debugger.error(e)
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,23 @@
from transliterate import translit


def __compose_str(string):
if len(string) <= 10:
return string
return string[len(string) // 2:]


def create_subjects_keyboard(schedule: list or set):
buttons_list = []
for item in schedule:
item: str
buttons_list.append([InlineKeyboardButton(text=item, callback_data=translit(
item[len(item) // 2:], language_code='ru', reversed=True))])
__compose_str(item), language_code='ru', reversed=True))])
keyboard_inline_buttons = InlineKeyboardMarkup(inline_keyboard=buttons_list)
return keyboard_inline_buttons


answer_start = ReplyKeyboardMarkup(resize_keyboard=True).add("Получить задание!").add('Управление заданиями')
answer_start = ReplyKeyboardMarkup(resize_keyboard=True).add("Получить задание!").add('Управление заданиями').add('Полезные материалы')
Inline_Date = InlineKeyboardMarkup(inline_keyboard=True, row_width=3)
Inline_Date_Week = InlineKeyboardButton(text='Вся неделя 🥶', callback_data='Inline_Date_Week')
Inline_Date_Bm = InlineKeyboardButton(text='Понедельник 💀', callback_data='Inline_Date_Bm')
Expand All @@ -28,12 +34,15 @@ def create_subjects_keyboard(schedule: list or set):
Inline_Edit = InlineKeyboardButton(text='Редактировать ДЗ', callback_data='Inline_Edit')
Inline_Add = InlineKeyboardButton(text='Добавить ДЗ', callback_data='Inline_Add')
Inline_Delete = InlineKeyboardButton(text='Удалить ДЗ', callback_data='Inline_Delete')
Inline_Manage.add(Inline_Add).add(Inline_Edit).add(Inline_Delete)
Inline_Materials = InlineKeyboardButton(text='Добавить материалы', callback_data='Inline_Materials')
Inline_Manage.add(Inline_Add).add(Inline_Edit).add(Inline_Delete).add(Inline_Materials)

Inline_Date_ADD = InlineKeyboardMarkup()

Inline_Date_ADD.add(Inline_Date_Up).add(Inline_Date_Bm).add(Inline_Date_Bt).add(Inline_Date_Bwd)\
.add(Inline_Date_Bth).add(Inline_Date_Bf)\
.add(Inline_Date_Sn).add(Inline_Date_Down)

Inline_Date.add(Inline_Date_Up).add(Inline_Date_Week).add(Inline_Date_Bm).add(Inline_Date_Bt).add(Inline_Date_Bwd)\
.add(Inline_Date_Bth).add(Inline_Date_Bf)\
.add(Inline_Date_Sn).add(Inline_Date_Down)
64 changes: 64 additions & 0 deletions Course_1/Telegram_Bot/Buttons/Maintenance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from Buttons.Add_Maintenance.source import *
from Buttons.Delete_Maintenance.source import *
from Buttons.Edit_Maintenance.source import *
from Buttons.Reply_Maintenance.source import *


async def callback_down(call: types.CallbackQuery, state: FSMContext):
try:
async with state.proxy() as data:
data['date_count'] += 1
date_count = data['date_count']
button_state = data["state"]
await bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=f"*{'Выбираем день недели' if not button_state else 'На какой день задание?'}\n📅 {week_definition(date_count)[0]} - {week_definition(date_count)[1]} 📅*",
parse_mode="markdown",
reply_markup=Inline_Date_ADD if button_state else Inline_Date)

except KeyError:
pass


async def callback_up(call: types.CallbackQuery, state: FSMContext):
try:
async with state.proxy() as data:
data['date_count'] -= 1
date_count = data['date_count']
button_state = data["state"]
await bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=f"*{'Выбираем день недели' if not button_state else 'На какой день задание?'}\n📅 {week_definition(date_count)[0]} - {week_definition(date_count)[1]} 📅*",
parse_mode="markdown",
reply_markup=Inline_Date_ADD if button_state else Inline_Date)
except KeyError:
pass


async def process_rule_command(message: types.Message, state: FSMContext):
await state.finish()
async with state.proxy() as data:
data['date_count'] = 0
Debugger.info(message.from_user.username, 'управляет заданиями')
if message.from_user.username in green_list():
await message.answer(
text='*Что будем делать?*',
parse_mode='markdown',
reply_markup=Inline_Manage
)

else:
await message.answer(
text='*Вы не можете управлять заданиями, для получения возможности → @Nps_rf или @monotank*',
parse_mode='markdown')


async def group_state_command(message: types.Message, state: FSMContext):
await state.finish()
await message.answer("Нажми на кнопку, чтобы получить домашнее задание.", reply_markup=answer_start)
chat_id = message.chat.id
user_group = message.text.upper()
HDB.add_user(chat_id=chat_id, user_group=user_group, username=message.from_user.username)

Loading