@TemaGerb

Как добавить кнопки в бота, через телеграм в Aiogram?

Хочу написать бота, и если захочу добавить новую кнопку, её можно было добавить через телеграм, а не исправлять код.
spoiler
import logging 
from aiogram import Bot, Dispatcher, executor, types 
API_TOKEN = 'токен'
logging.basicConfig(level=logging.INFO) # Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
Keyboard = types.InlineKeyboardMarkup(row_width=1)
button1 = types.InlineKeyboardButton(text='Ютуб', url='www.youtube.com')
button2 = types.InlineKeyboardButton(text='ВК', url='https://vk.com/')
Keyboard.add(button1, button2)
@dp.message_handler(commands=['start','help'])
async def start_message (message: types.Message):
    await message.answer('Привет!\nВот удобные сервисы.', reply_markup=Keyboard)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Гипотетически можно, но практически тяжело. Объясню почему.

Если ты хочешь добавить в бота новую функциональность, то это возможно при выполнении одного из двух условий:
1. Новая функциональность по сути совпадает со старой, но работает с другими параметрами. Например, раньше парсили один сайт, теперь два. Пробелма в том, что для этого нужно заранее проектировать старую функциональность так, чтобы она была гибкой. Иными словами, если у тебя в коде намертво прописан путь, по которому нужно вытаскивать с сайта информацию, то без правки кода не получится ничего изменить. И даже если ты это предусмотришь, всё равно будут пределы этой гибкости.

2. Ты можешь загрузить в бота код, реализующий новую функциональность. Для этого нужно будет:
- разбить бота на изолированные компоненты, по типу Cogs из библиотеки discord.py.
- предусмотреть механизм подгрузки файла с компонентом в бота "на ходу".
- предусмотреть механизм выгрузки компонента из бота "на ходу", что намного сложнее. Это потребуется, если ты захочешь заменить компонент обновлённой версией, не перезапуская бота.
- предусмотреть механизм, позволяющий тебе отдать боту файл с кодом, чтобы тот поместил этот файл к остальным компонентам.
Это всё нетривиальные задачи, которые требуют очень хорошего понимания как Питона, так и устройства библиотеки aiogram. Собственно, беглый взгляд на доки показывает, что aiogram вообще не предусматривает удаления обработчиков событий. А это значит что единственный способ выгрузить функциональность из бота - это его перезапуск.
Ответ написан
Комментировать
Buchachalo
@Buchachalo
Да все возможно.
Реализовать генератор кнопок.
Записать в БД url своих ресурсов. В том числе и возможность добавления в БД url через бота.
В генератор кнопок стравливать все записи из своей БД.
Заранее предусмотреть пагинацию на кнопках, так как url у тебя будет не мало со временем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы