Помогите упростить код 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