Упростить код можно как-то так
goods = ['Товар1', 'Товар2', 'Товар3', 'Товар4', 'Товар5', 'Товар6', 'Товар7', 'Товар8', 'Товар9', 'Товар10', 'Товар11', 'Товар12']
@bot.message_handler(func=lambda mess: "Продукция1" == mess.text, content_types=['text'])
def handle_text(message):
keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True, one_time_keyboard=False)
for goods_item in goods:
keyboard.row(goods_item)
bot.send_message(message.from_user.id, "Выберите товар", reply_markup=keyboard)
@bot.message_handler(func=lambda mess: mess.text in goods, content_types=['text'])
def handle_text(message):
keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True, one_time_keyboard=False)
if message.text in goods:
bot.send_message(message.chat.id, "", reply_markup=keyboard )
Массив goods соответственно можете определять динамически как вам удобно, формировать другие списки и т.д.
Вариантов хранения огромное множество, какой выбрать зависит от способа размещения бота и способа получения первоначальных данных. Это может бытьфайл txt, csv, json, xml, или python объекты, сохраненные через модули shelve или pickle, или sqlite база данных, или полноценная база данных.
UPD:
Функции называются одинаково, надо дать им разные названия