Помогите упростить код python

Помогите пожалуйста уменьшить код, буду благодарен.

@dp.message_handler(text='ПН')
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = pn_n(groups[row])
            await message.answer(info, reply_markup=il_1)


@dp.message_handler(text='ВТ')
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = vt_n(groups[row])
            await message.answer(info, reply_markup=il_3)


@dp.message_handler(text='СР')
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = sr_n(groups[row])
            await message.answer(info, reply_markup=il_5)


@dp.message_handler(text='ЧТ')
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = ct_n(groups[row])
            await message.answer(info, reply_markup=il_7)


@dp.message_handler(text='ПТ')
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = pt_n(groups[row])
            await message.answer(info, reply_markup=il_9)


@dp.callback_query_handler(text='PN_p')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = pn_p(groups[row])
            await call.message.answer(info, reply_markup=il_2)


@dp.callback_query_handler(text='PN_n')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = pn_n(groups[row])
            await call.message.answer(info, reply_markup=il_1)

@dp.callback_query_handler(text='VT_p')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = vt_p(groups[row])
            await call.message.answer(info, reply_markup=il_4)


@dp.callback_query_handler(text='VT_n')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = vt_n(groups[row])
            await call.message.answer(info, reply_markup=il_3)

@dp.callback_query_handler(text='SR_p')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = sr_p(groups[row])
            await call.message.answer(info, reply_markup=il_6)


@dp.callback_query_handler(text='SR_n')
async def answer(call: CallbackQuery):
    result = connect(call)
    if result is None:
        print('none')
    for row in result:
        if row in groups.keys():
            info = sr_n(groups[row])
            await call.message.answer(info, reply_markup=il_5)

Ответы (3 шт):

Автор решения: CrazyElf

Я не силён конкретно в telegram-bot, поэтому не скажу как точно будет выглядеть передача параметра в функцию, но должно получиться что-то такое. Только не знаю где взять/как передать text в функцию, по которому у вас фильтрация в декораторе, но допустим вы его как-то передали:

infos = {'ПН': pn_n, 'ВТ': vt_n } # и т.д.
markups = {'ПН': il_1, 'ВТ': il_3 } # и т.д.

@dp.message_handler()
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = infos[text](groups[row])
            await message.answer(info, reply_markup=markups[text])
→ Ссылка
Автор решения: Дмитрий Бовак
weeks_days = ['ПН', 'ВТ', 'СР' и т.д]

@dp.message_handler(lambda message: message.text in week_days)#Так он будет ловить все из списка week_days
async def pn(message: types.Message):
    result = connect(message)
    for row in result:
        if row in groups.keys():
            info = infos[text](groups[row])
            await message.answer(info, reply_markup=my_numbers(week_days))

Вот так ловить нажатия на кнопки

@dp.callback_query_handler(text_contains="push")
async def save_ass(call: CallbackQuery):
    await call.answer(cache_time=60)
    data = call.data.split(',')
→ Ссылка
Автор решения: Дмитрий Бовак

А для reply_markup нужно отдельную функцию создать.

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup

def my_numbers(week_days):
    menu = InlineKeyboardMarkup(row_width=1)
    for i in week_days:
        button = InlineKeyboardButton(text=i, callback_data=f"push,{i}")
        menu.insert(button)
    return menu
→ Ссылка