Приветствую.
Пишу телеграм бота используя библиотеку
https://github.com/TelegramBot/Api и Yii2
Задача: сделать пошаговое заполнение профиля.
У бота написал такой код:
$bot->command('start', function ($message) use ($bot) {
$user = new User();
$user->setAttributes(['t_id' => $message->getFrom()->getId()]);
$user->save();
$bot->sendMessage($update->getMessage()->getChat()->getId(), "Введите имя: ");
});
// Шаг 1, вводим имя
$bot->on(function (Update $update) use ($bot) {
$user = User::find()->where(['t_id' => $update->getMessage()->getFrom()->getId())->one();
$user->setAttribute('name', $update->getMessage()->getText());
$user->save();
$bot->sendMessage($update->getMessage()->getChat()->getId(), "Введите фамилию: ");
}, function (Update $update) {
if (!$update->getMessage()) {
return false;
}
$user = User::find()->where(['t_id' => $update->getMessage()->getFrom()->getId())->one();
if (!$user) {
return false;
}
return empty($user->name);
});
// Шаг 2, вводим фамилию
$bot->on(function (Update $update) use ($bot) {
$user = User::find()->where(['t_id' => $update->getMessage()->getFrom()->getId())->one();
$user->setAttribute('lastname', $update->getMessage()->getText());
$user->save();
$bot->sendMessage($update->getMessage()->getChat()->getId(), "Имя и фамилия введены! Спасибо");
}, function (Update $update) {
if (!$update->getMessage()) {
return false;
}
$user = User::find()->where(['t_id' => $update->getMessage()->getFrom()->getId())->one();
if (!$user) {
return false;
}
return empty($user->lastname);
});
В on() первая функция выполняется, если результат второй функции true.
В коде не нравится разбиение логики и зависимости - если изменяем в одной функции критерии выполнения, в другой надо сменить тоже - например если надо поменять порядок ввода имя и фамилия, или допустим если нужно будет добавить после имен отчество, придется переписывать почти всё.
И очень сложно поддерживать такой код, когда шагов уже не 2 а 5-6 уже становится сложно в этом разобраться.
Подскажите, как можно такой алгоритм упростить, сделать более легко поддерживаемым? Чтобы легче было менять местами шаги и дополнять их.
Буду благодарен за ссылки на литературу, ключевики которые надо гуглить, гитхаб ссылкам с хорошими примерами, и любым другим советам/критике :)