@fakin_kiska
Telegram Bots and iOS

Почему не меняется язык в боте?

У меня есть файл, где хранятся два массива - тексты на русском и английском языках. Смена языка осуществляется через inline кнопки. Выбранный язык для каждого пользователя бот сохраняет в БД (по умолчанию стоит русский), там хранится в отдельном столбце с типом данных boolean и достает каждый раз когда присылает сообщение (достает либо 0, либо 1).

Для обычных команд текст спокойно меняется на выбранный и выводится, но со всплывающими окнами в inline-моде возникли трудности

Сам код:

// Поменять язык на Английский
function english_language($user_id)
{
    global $pdo;
    $sql = "UPDATE users
        SET language = 1
        WHERE user_id = :user_id";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
    $stmt->execute();
}

// Поменять язык на Русский
function russian_language($user_id)
{
    global $pdo;
    $sql = "UPDATE users
        SET language = 0
        WHERE user_id = :user_id";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
    $stmt->execute();
}

// Достать id языка, используемого юзером
function get_language($user_id)
{
    global $pdo;
    $sql = "SELECT language
        FROM users
        WHERE user_id = :user_id";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
    $stmt->execute();
    return $stmt->fetch();
}

include 'secret_texts.php'; // Здесь находятся массивы с текстом на разных языках

$language = get_language($user_id);

$data = json_decode(file_get_contents('php://input'), JSON_OBJECT_AS_ARRAY);

$inline_query = $data['inline_query'];
$inline_query_id = $data['inline_query']['id'];

if (isset($inline_query)) { // Обработка инлайн запроса
        $answer_inline_query = [
            "inline_query_id" => $inline_query_id,
            "results" => '',
        ];

        if (preg_match('/@\w{5,}/', $inline_query_msg)) {

            if ($language['language'] == 0) {
                $response = sendRequest('answerInlineQuery?inline_query_id=' . $inline_query_id . '&cache_time=' . null . '&results=' . json_encode(
                        [
                            [
                                "type" => "article",
                                "id" => "2",
                                "title" => $russian_language['send_title'],
                                "description" => $russian_language['send_description'],
                                $secret_button = [[['text' => $russian_language['send_button'], 'callback_data' => $delete]]],
                                "reply_markup" => json_decode(inline_keyboard($secret_button)),
                                "input_message_content" => [
                                    "message_text" => $russian_language['send_text_1'] . $inline_receiver_username . $russian_language['send_text_2']
                                ],
                                "thumb_url" => "jpg",
                                "photo_width" => "512",
                                "photo_height" => "512"
                            ]
                        ]
                    ));
            } elseif ($language['language'] == 1) {
                $response = sendRequest('answerInlineQuery?inline_query_id=' . $inline_query_id . '&cache_time=' . null . '&results=' . json_encode(
                        [
                            [
                                "type" => "article",
                                "id" => "2",
                                "title" => $english_language['send_title'],
                                "description" => $english_language['send_description'],
                                $secret_button = [[['text' => $english_language['send_button'], 'callback_data' => $delete]]],
                                "reply_markup" => json_decode(inline_keyboard($secret_button)),
                                "input_message_content" => [
                                    "message_text" => $english_language['send_text_1'] . $inline_receiver_username . $english_language['send_text_2']
                                ],
                                "thumb_url" => "jpg",
                                "photo_width" => "512",
                                "photo_height" => "512"
                            ]
                        ]
                    ));
            }
        }
    }


Бот в любом случае выводит текст только с первого условия (в моем случае на русском языке, если первым поставлю английский, то соответственно будет уже он отображаться)
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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