*/ final class select extends core { /** * Language * * Send the language choose menu * * @param context $context Request data from Telegram * @param string $prefix Prefix for 'callback_data' (`$prefix . $language->name`) * @param string $title Title of the message * @param string $description Description of the message * @param array $exclude Languages that will be excluded ['ru', 'en'...] * * @return void */ public static function menu(context $context, string $prefix, string $title, string $description, array $exclude = []): void { // Initializing the account $account = $context->get('account'); if ($account instanceof record) { // Initialized the account // Initializing language $language = $context->get('language'); if ($language) { // Initialized language // Initializing localization $localization = $context->get('localization'); if ($localization) { // Initialized localization // Declaring the buffer of generated keyboard with languages $keyboard = []; // Initializing the iterator of rows $row = 0; // Initializing buffer of languages $languages = language::cases(); // Deleting the actual language from buffer of languages unset($languages[array_search($language, $languages, strict: true)]); // Sorting buffer of languages by the actual language $languages = [$language, ...$languages]; foreach ($languages as $language) { // Iterating over languages // Skipping excluded languages if (array_search($language->name, $exclude, strict: true) !== false) continue; // Initializing the row $keyboard[$row] ??= []; // Writing the language choose button into the buffer of generated keyboard with languages $keyboard[$row][] = [ 'text' => ($language->flag() ? $language->flag() . ' ' : '') . $language->label($language), 'callback_data' => $prefix . $language->name ]; // When reaching 4 buttons in a row, move to the next row if (count($keyboard[$row]) === 4) ++$row; } // Writing the button for helping lozalizing $keyboard[$row === 0 && empty($keyboard[0]) ? 0 : ++$row] = [ [ 'text' => '🗂 ' . $localization['select_language_button_add'], 'url' => 'https://git.svoboda.works/garden\campanula/src/branch/stable/kodorvan/neurobot/system/localizations' ] ]; // Sending the message $context->sendMessage( $title ?? '🌏 *' . $localization['select_language_title'] . "*\n" . ($description ?? $localization['select_language_description']), [ 'reply_markup' => [ 'inline_keyboard' => $keyboard, 'disable_notification' => true ], ] ); } else { // Not initialized localization // Sending the message $context->sendMessage('⚠️ *Failed to initialize localization*') ->then(function (message $message) use ($context) { // Sended the message // Ending the conversation process $context->endConversation(); }); } } else { // Not initialized language // Sending the message $context->sendMessage('⚠️ *Failed to initialize language*') ->then(function (message $message) use ($context) { // Sended the message // Ending the conversation process $context->endConversation(); }); } } else { // Not initialized the account // Sending the message $context->sendMessage('⚠️ *Failed to initialize your Telegram account*') ->then(function (message $message) use ($context) { // Sended the message // Ending the conversation process $context->endConversation(); }); } } }