Closed Laxilef closed 3 weeks ago
Либо можно добавить virtual
к методам addButton
, newRow
и перенести _toJson
в public
и добавить ему virtual
.
Но тогда условие в Message.h
void setMenu(Menu& menu) {
if (menu.text.length()) _menu = &menu;
}
целесообразно заменить на что-то вроде
void setMenu(Menu& menu) {
if (!menu.empty()) _menu = &menu;
}
А метод empty
добавить в Menu
и повесить на него virtual
.
Для InlineMenu
аналогично.
Хорошее дело, спасибо. А для чего ещё кроме меню может пригодиться?
А для чего ещё кроме меню может пригодиться?
Без серьезного рефакторинга скорее всего только для методов FastBot2Client.h
, которые создают пакет, например:
// отправить сообщение
fb::Result sendMessage(const fb::Message& m, bool wait = true) {
// ... существующий метод
}
// отправить сообщение
fb::Result sendMessage(const fb::Message& m, gson::string& opts, bool wait = true) {
if (!m.text.length() || !m.chatID) return fb::Result();
fb::Packet p(tg_cmd::sendMessage, _token);
if (opts.length()) {
p.addTextRaw(opts);
}
m.makePacket(p);
return sendPacket(p, wait);
}
Может быть полезно для параметров, для которых не созданы свойства в классе, но все же иногда используются. В меню все немного иначе, т.к. нам нужно там хранить массив кнопок, поэтому и подход другой.
Могу попробовать подготовить PR.
upd: взглянул поподробнее, есть вариативность. Можно запихнуть функционал кастомизации запроса как в Message
и наследников, так и в FastBot2Client
. Как лучше сделать - хз, зависит от желаемой архитектуры.
Однако если разраб добавит какой-то параметр, который уже существует в запросе, то запрос будет невалидным, т.к. архитектурно GSON не позволяет менять отдельные параметры. Т.е. если функционал добавлять, то нужно в документации это указать.
Можно ещё в условный message добавить публичный gson string, и писать в него нужные параметры из скетча. А при сборке он добавится к пакету. Ну и в остальных классах сделать так же
Приветствую. Спасибо за библиотеку!
Есть проблема с кастомизацией. Для себя написал CustomMenu, который наследует Menu для использования параметров кнопок:
Однако без изменения исходного Menu нормально это не работает, т.к. toJson приватный и не виртуальный. Возможно ли добавить интерфейсы? Т.е. создать MenuInterface и в остальном коде использовать их, например
Ну а стоковый Menu будет наследовать MenuInterface. Это позволит создавать любые кастомные Menu согласно интерфейсу. В принципе это актуально и для других классов, это добавит гибкости.
Для примера: