{"id":279,"date":"2025-11-21T11:30:30","date_gmt":"2025-11-21T11:30:30","guid":{"rendered":"https:\/\/i-cte.org\/robot\/?p=279"},"modified":"2025-11-25T08:10:26","modified_gmt":"2025-11-25T08:10:26","slug":"whats-happening-vocabulary","status":"publish","type":"post","link":"https:\/\/i-cte.org\/robot\/whats-happening-vocabulary\/","title":{"rendered":"What&#8217;s happening? &#8211; Vocabulary"},"content":{"rendered":"\n<p>This Robot is used for practicing English at level A2. In order to interact with this Robot smoothly, please use a laptop, desktop, or iPad. Do not use Smartphones.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>What&#8217;s happening? &#8211; Vocabulary<\/title>\n    <style>\n        \/* Reset and Base Styles *\/\n        * {\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: Arial, sans-serif;\n            background-color: #f4f6f8;\n            margin: 0;\n            padding: 0;\n            display: flex;\n            flex-direction: column;\n            min-height: 100vh;\n        }\n\n        \/* Menu Styles *\/\n        .menu {\n            width: 100%;\n            background-color: #28a745;\n            padding: 10px;\n            text-align: center;\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n            margin-bottom: 10px;\n            overflow-x: auto;\n            white-space: nowrap;\n        }\n        .menu a {\n            color: #fff;\n            text-decoration: none;\n            margin: 0 10px;\n            font-weight: bold;\n            font-size: 14px;\n            display: inline-block;\n        }\n        .menu a:hover,\n        .menu a:focus {\n            text-decoration: underline;\n            outline: 2px dashed #fff;\n            outline-offset: 4px;\n        }\n\n        \/* Container Styles *\/\n        .container {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            padding: 10px;\n            box-sizing: border-box;\n            flex: 1 0 auto;\n            width: 100%;\n        }\n\n        \/* Image and Chat Containers *\/\n        .image-chat-wrapper {\n            display: flex;\n            flex-direction: column;\n            width: 100%;\n            max-width: 800px;\n            flex: 1;\n        }\n\n        \/* Image Container Styles *\/\n        .image-container {\n            flex: 1;\n            text-align: center;\n            margin-bottom: 15px;\n        }\n        .image-container img {\n            width: 100%;\n            height: auto;\n            max-height: 300px;\n            object-fit: cover;\n            border-radius: 15px;\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n        }\n        .sentence-text {\n            margin: 10px 0;\n            font-weight: bold;\n            color: #333;\n            font-size: 16px;\n        }\n        .word-box {\n            margin-top: 10px;\n            padding: 10px;\n            background-color: #fff;\n            border: 2px solid #28a745;\n            border-radius: 8px;\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n            font-size: 16px;\n            font-weight: bold;\n            color: #28a745;\n            text-align: left;\n            max-height: 250px;\n            overflow-y: auto;\n        }\n\n        \/* Chat Container Styles *\/\n        .chat-container {\n            background-color: #28a745;\n            border-radius: 15px;\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n            border: 3px solid #007bff; \/* blue border for chatbot *\/\n            overflow: hidden;\n            display: flex;\n            flex-direction: column;\n            height: auto;\n            max-height: 500px;\n            flex: 1;\n        }\n        .chat-header {\n            background-color: #1e7e34;\n            color: #fff;\n            padding: 12px;\n            text-align: center;\n            border-bottom: 1px solid #155724;\n            position: relative;\n        }\n        .chat-header h2 {\n            margin: 0;\n            font-size: 18px;\n        }\n        \/* Loader Indicator *\/\n        .chat-header .loader {\n            position: absolute;\n            right: 20px;\n            top: 50%;\n            transform: translateY(-50%);\n            display: none;\n        }\n        .chat-messages {\n            padding: 12px;\n            overflow-y: auto;\n            flex: 1;\n            background-color: #fff;\n            max-height: 300px;\n        }\n        .message {\n            margin-bottom: 10px;\n            padding: 10px;\n            border-radius: 6px;\n            font-size: 14px;\n            line-height: 1.5;\n        }\n        .user-message {\n            background-color: #ffc107;\n            color: #fff;\n            text-align: right;\n        }\n        .bot-message {\n            background-color: #17a2b8;\n            color: #fff;\n            text-align: left;\n        }\n\n        \/* Chat Input Styles *\/\n        .chat-input {\n            display: flex;\n            align-items: center;\n            background-color: #c3e6cb;\n            padding: 10px;\n            justify-content: space-between;\n            flex-wrap: wrap;\n        }\n        .send-button, .stop-button {\n            background-color: #17a2b8;\n            color: #fff;\n            font-weight: bold;\n            border: none;\n            border-radius: 5px;\n            padding: 12px 16px;\n            cursor: pointer;\n            transition: background-color 0.3s;\n            flex: 1;\n            margin: 6px;\n            max-width: 150px;\n            font-size: 16px;\n        }\n        .stop-button {\n            background-color: #dc3545;\n        }\n        .send-button:hover,\n        .stop-button:hover,\n        .send-button:focus,\n        .stop-button:focus {\n            background-color: #218838;\n            outline: none;\n        }\n\n        \/* Voice Selection Styles *\/\n        .voice-selection {\n            margin: 10px 0;\n            width: 100%;\n            max-width: 300px;\n        }\n        .voice-selection label {\n            display: block;\n            margin-bottom: 5px;\n            font-weight: bold;\n            color: #333;\n        }\n        .voice-selection select {\n            width: 100%;\n            padding: 8px;\n            border-radius: 5px;\n            border: 1px solid #ccc;\n            font-size: 14px;\n        }\n\n        \/* Loader Styles *\/\n        .loader {\n            border: 4px solid #f3f3f3;\n            border-top: 4px solid #17a2b8;\n            border-radius: 50%;\n            width: 20px;\n            height: 20px;\n            animation: spin 2s linear infinite;\n            display: inline-block;\n            margin-left: 10px;\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        \/* Responsive Design Adjustments *\/\n\n        \/* Portrait Mode *\/\n        @media (orientation: portrait) {\n            .image-chat-wrapper {\n                flex-direction: column;\n            }\n            .image-container, .chat-container {\n                width: 100%;\n                max-width: 100%;\n            }\n        }\n\n        \/* Landscape Mode *\/\n        @media (orientation: landscape) and (min-width: 600px) {\n            .image-chat-wrapper {\n                flex-direction: row;\n                justify-content: space-between;\n            }\n            .image-container, .chat-container {\n                width: 48%;\n                max-width: 48%;\n            }\n            .word-box {\n                max-height: 200px;\n            }\n            .chat-header h2 {\n                font-size: 20px;\n            }\n            .message {\n                font-size: 15px;\n            }\n            .send-button, .stop-button {\n                font-size: 18px;\n                padding: 14px 20px;\n                max-width: 200px;\n            }\n        }\n\n        \/* General Mobile Responsiveness *\/\n        @media (max-width: 768px) {\n            .chat-header h2 {\n                font-size: 16px;\n            }\n            .message {\n                font-size: 14px;\n            }\n            .send-button, .stop-button {\n                font-size: 16px;\n                padding: 12px 16px;\n                max-width: 150px;\n            }\n            .word-box {\n                font-size: 15px;\n            }\n            .voice-selection select {\n                font-size: 14px;\n            }\n        }\n\n        \/* Samsung Android Specific Adjustments *\/\n        @media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2) {\n            .chat-header h2 {\n                font-size: 18px;\n            }\n            .send-button, .stop-button {\n                padding: 14px 18px;\n                font-size: 16px;\n            }\n            .message {\n                font-size: 14px;\n            }\n            .word-box {\n                font-size: 16px;\n            }\n            .chat-input input {\n                font-size: 16px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"menu\">\n<a href=\"https:\/\/i-cte.org\/robot\/whats-happening-conversation\/\">Conversation<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-vocabulary\/\">Vocabulary<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-real-life\/\">Real Life<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-describing-pictures\/\">Describing Pictures<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-job-application\/\">Job Application<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-speaking\/\">Speaking<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-reading-comprehension\/\">Reading<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-practice\/\">Practice<\/a>\n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"image-chat-wrapper\">\n            <div class=\"image-container\">\n                <img decoding=\"async\" src=\"https:\/\/i-cte.org\/robot\/wp-content\/uploads\/2025\/11\/1.webp\" alt=\"Robot teacher asking what's happening now\">\n                <div class=\"sentence-text\">Listen to the questions about what is happening now and these days. Answer in full sentences.<\/div>\n                <div id=\"word-box\" class=\"word-box\">\n                    <!-- Learned sentences and answers will be displayed here -->\n                <\/div>\n            <\/div>\n            <div class=\"chat-container\">\n                <div class=\"chat-header\">\n                    <h2>What\u2019s happening? &#8211; Vocabulary<\/h2>\n                    <div class=\"loader\" id=\"synthesis-loader\"><\/div>\n                <\/div>\n                <div class=\"chat-messages\" id=\"chat-messages\">\n                    <!-- Messages will appear here -->\n                <\/div>\n                <div class=\"chat-input\">\n                   <!-- Voice Selection Dropdown -->\n                    <div class=\"voice-selection\">\n                        <label for=\"voice-select\">Choose Voice:<\/label>\n                        <select id=\"voice-select\" aria-label=\"Select Voice\">\n                            <option value=\"\">Loading voices&#8230;<\/option>\n                        <\/select>\n                    <\/div>\n                    <!-- Start and Stop Buttons -->\n                    <button id=\"start-btn\" class=\"send-button\" aria-label=\"Start Lesson\">Start<\/button>\n                    <button id=\"stop-btn\" class=\"stop-button\" aria-label=\"Stop Lesson\">Stop<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"menu\">\n<a href=\"https:\/\/i-cte.org\/robot\/whats-happening-conversation\/\">Conversation<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-vocabulary\/\">Vocabulary<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-real-life\/\">Real Life<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-describing-pictures\/\">Describing Pictures<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-job-application\/\">Job Application<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-speaking\/\">Speaking<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-reading-comprehension\/\">Reading<\/a>\n      <a href=\"https:\/\/i-cte.org\/robot\/whats-happening-practice\/\">Practice<\/a>\n    <\/div>\n<script>\n \/\/ Questions for \"What's happening?\" \u2013 housework & everyday activities\n const questions = [\n    { \n        english: \"What are you doing right now? Are you making anything?\", \n        keywords: [\"making\", \"cup of coffee\", \"cake\", \"dinner\"],\n        answer: \"Right now, I\u2019m making a cup of coffee in the kitchen.\"\n    },\n    { \n        english: \"Are you doing the laundry this week?\", \n        keywords: [\"doing the laundry\", \"laundry\", \"this week\"],\n        answer: \"Yes, I\u2019m doing the laundry this week. I\u2019m washing my clothes tonight.\"\n    },\n    { \n        english: \"Are you doing the dishes today, or is someone else doing them?\", \n        keywords: [\"doing the dishes\", \"dishes\", \"cleaning up\"],\n        answer: \"Today I\u2019m doing the dishes after dinner.\"\n    },\n    { \n        english: \"Are you making dinner at the moment, or are you taking a break?\", \n        keywords: [\"making dinner\", \"dinner\", \"taking a break\"],\n        answer: \"I\u2019m not making dinner right now. I\u2019m taking a break.\"\n    },\n    { \n        english: \"Are you doing any ironing or cleaning this week?\", \n        keywords: [\"doing the ironing\", \"doing the cleaning\", \"cleaning\", \"ironing\"],\n        answer: \"Yes, I\u2019m doing the ironing this week and I\u2019m also doing the cleaning on Saturday.\"\n    },\n    { \n        english: \"Are you making your bed every morning these days?\", \n        keywords: [\"making the bed\", \"make the bed\", \"every morning\"],\n        answer: \"Yes, I\u2019m making my bed every morning these days.\"\n    },\n    { \n        english: \"Are you watching any movies or playing computer games this week?\", \n        keywords: [\"watching a movie\", \"playing a computer game\", \"this week\"],\n        answer: \"Yes, I\u2019m watching a movie tonight and I\u2019m playing a computer game this week.\"\n    },\n    { \n        english: \"Are you going shopping downtown this weekend?\", \n        keywords: [\"shopping downtown\", \"downtown\", \"this weekend\"],\n        answer: \"Yes, I\u2019m going shopping downtown this weekend with my friends.\"\n    },\n    { \n        english: \"Are you studying English this semester or this month?\", \n        keywords: [\"studying English\", \"this semester\", \"this month\"],\n        answer: \"Yes, I\u2019m studying English this semester. I\u2019m working hard this month.\"\n    },\n    { \n        english: \"Are you doing anything special this week or this month?\", \n        keywords: [\"doing anything\", \"this week\", \"this month\", \"special\"],\n        answer: \"Yes, I\u2019m visiting my family this week and I\u2019m traveling next month.\"\n    }\n ];\n\n \/\/ Positive feedback\n const positiveFeedback = [\n    \"Great job!\",\n    \"Well done!\",\n    \"Excellent response!\",\n    \"Very good.\",\n    \"Your answer was clear and natural.\",\n    \"Fantastic!\",\n    \"You\u2019re using the new vocabulary very well.\",\n    \"Nice use of the present continuous.\"\n ];\n\n \/\/ Constructive feedback \u2013 nudging toward target vocabulary\n const constructiveFeedback = [\n    \"Try to use the present continuous, for example: I\u2019m doing the laundry, I\u2019m making dinner.\",\n    \"Could you add more detail, such as this week, this month, or this semester?\",\n    \"Try using housework words like do the laundry, do the dishes, or make the bed.\",\n    \"Adding phrases like watching a movie or playing a computer game can improve your answer.\",\n    \"Think about saying what you are doing right now or these days, not what you usually do.\",\n    \"Including collocations like make dinner or do the cleaning would be helpful.\",\n    \"Try to relate your answer to real activities: ironing, cleaning, studying English, shopping downtown.\",\n    \"Expanding your answer with when you are doing it, for example this week or this month, will make it better.\",\n    \"Providing more context, such as who you\u2019re with or where you are, can enhance your response.\",\n    \"Think about using full sentences like: I\u2019m doing the dishes right now or I\u2019m studying English this semester.\"\n ];\n\n \/\/ Pronunciation feedback \u2013 focusing on key words\n const pronunciationFeedback = [\n    \"Good job! Try to say \u201claundry\u201d slowly: LAUN-dry.\",\n    \"Nice answer! Practice the word \u201cironing\u201d \u2013 EYE-ur-ning.\",\n    \"Well spoken! Focus on the phrase \u201cshopping downtown\u201d and link the words smoothly.\",\n    \"Great effort! Pay attention to the -ing endings in words like cleaning, ironing, and studying.\",\n    \"Your pronunciation is clear. For extra practice, repeat: I\u2019m doing the laundry and I\u2019m making dinner.\"\n ];\n\n \/\/ Stop keywords\n const stopKeywords = [\"goodbye\", \"good bye\", \"bye\", \"bye-bye\", \"byebye\"];\n\n let currentQuestionIndex = 0;\n let recognition;\n let isLessonActive = false;\n let speechRecognitionActive = false;\n\n const speechSynthesisSupported = 'speechSynthesis' in window;\n const speechRecognitionSupported = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n let voices = [];\n let selectedVoice = null;\n\n const desiredVoiceNames = [\n    'Google US English',\n    'Google US English Female',\n    'Google UK English Male',\n    'Google UK English Female'\n ];\n\n function initialize() {\n    loadVoices();\n\n    if (speechSynthesisSupported) {\n        setTimeout(() => greetUser(), 500);\n    } else {\n        appendMessage(\"Sorry, your browser does not support speech synthesis.\", \"bot\");\n    }\n\n    if (!speechRecognitionSupported) {\n        appendMessage(\"Sorry, your browser does not support speech recognition.\", \"bot\");\n    }\n\n    document.getElementById('start-btn').onclick = function() {\n        if (isLessonActive) return;\n\n        if (!speechSynthesisSupported) {\n            appendMessage(\"Speech synthesis is not supported in your browser.\", \"bot\");\n            return;\n        }\n        if (!speechRecognitionSupported) {\n            appendMessage(\"Speech recognition is not supported in your browser.\", \"bot\");\n            return;\n        }\n\n        isLessonActive = true;\n        currentQuestionIndex = 0;\n        clearWordBox();\n        startLesson();\n    };\n\n    document.getElementById('stop-btn').onclick = function() {\n        if (recognition && speechRecognitionActive) {\n            recognition.stop();\n            speechRecognitionActive = false;\n        }\n        endLesson(true);\n    };\n }\n\n function loadVoices() {\n    voices = window.speechSynthesis.getVoices();\n    if (voices.length === 0) {\n        window.speechSynthesis.onvoiceschanged = () => {\n            voices = window.speechSynthesis.getVoices();\n            populateVoiceList();\n        };\n    } else {\n        populateVoiceList();\n    }\n }\n\n function populateVoiceList() {\n    const voiceSelect = document.getElementById('voice-select');\n    voiceSelect.innerHTML = '';\n\n    const filteredVoices = voices.filter(voice => desiredVoiceNames.includes(voice.name));\n\n    if (filteredVoices.length === 0) {\n        const option = document.createElement('option');\n        option.value = \"\";\n        option.textContent = \"No desired voices available\";\n        voiceSelect.appendChild(option);\n        voiceSelect.disabled = true;\n        return;\n    }\n\n    filteredVoices.forEach((voice, index) => {\n        const option = document.createElement('option');\n        option.value = index;\n        option.textContent = `${voice.name} (${voice.lang})`;\n        voiceSelect.appendChild(option);\n    });\n\n    if (filteredVoices.length > 0) {\n        voiceSelect.selectedIndex = 0;\n        selectedVoice = filteredVoices[0];\n    }\n\n    voiceSelect.onchange = () => {\n        const selectedIndex = voiceSelect.value;\n        selectedVoice = filteredVoices[selectedIndex];\n        console.log(`Selected voice: ${selectedVoice.name}`);\n    };\n }\n\n function greetUser() {\n    const greeting = \"Hello! Welcome to the lesson 'What\u2019s happening?' We\u2019ll practice vocabulary like doing the laundry, making dinner, doing the dishes, ironing, cleaning, watching a movie, and studying English this week. Are you ready? Click Start to begin!\";\n    appendMessage(greeting, 'bot');\n    showSynthesisLoader(true);\n    sayText(greeting, \"en-US\").then(() => {\n        showSynthesisLoader(false);\n    });\n }\n\n function startLesson() {\n    if (currentQuestionIndex < questions.length) {\n        const question = questions[currentQuestionIndex];\n        const questionNumber = currentQuestionIndex + 1;\n        const questionText = `Question ${questionNumber}: ${question.english}`;\n\n        appendMessage(questionText, 'bot');\n        addSentenceToBox(`Q${questionNumber}: ${question.english}`);\n        showSynthesisLoader(true);\n        sayText(questionText, \"en-US\").then(() => {\n            showSynthesisLoader(false);\n            addSentenceToBox(`Answer: ${question.answer}`);\n            listenUserResponse(question);\n        });\n    } else {\n        endLesson(false);\n    }\n }\n\n function listenUserResponse(question) {\n    recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();\n    recognition.lang = 'en-US';\n    recognition.interimResults = false;\n    recognition.maxAlternatives = 1;\n\n    showRecognitionLoader(true);\n    appendMessage(\"Listening...\", \"bot\");\n    speechRecognitionActive = true;\n\n    recognition.start();\n\n    recognition.onresult = function(event) {\n        if (!speechRecognitionActive) return;\n\n        const userInput = event.results[0][0].transcript.trim();\n        const formattedInput = normalizeAndFormatUserInput(userInput);\n        appendMessage(formattedInput, 'user');\n\n        showRecognitionLoader(false);\n        speechRecognitionActive = false;\n\n        if (checkStopKeywords(formattedInput.toLowerCase())) {\n            endLesson(true);\n            return;\n        }\n\n        let feedbackMessage = \"\";\n        const grammarFeedback = checkGrammar(formattedInput);\n        if (grammarFeedback) {\n            feedbackMessage = grammarFeedback;\n        } else {\n            const feedbackType = analyzeResponse(formattedInput, question.keywords);\n            if (feedbackType === \"pronunciation\") {\n                feedbackMessage = pronunciationFeedback[Math.floor(Math.random() * pronunciationFeedback.length)];\n            } else if (feedbackType === \"positive\") {\n                feedbackMessage = positiveFeedback[Math.floor(Math.random() * positiveFeedback.length)];\n            } else {\n                feedbackMessage = constructiveFeedback[Math.floor(Math.random() * constructiveFeedback.length)];\n            }\n        }\n\n        appendMessage(feedbackMessage, 'bot');\n        showSynthesisLoader(true);\n        sayText(feedbackMessage, \"en-US\").then(() => {\n            showSynthesisLoader(false);\n            currentQuestionIndex++;\n            setTimeout(() => {\n                startLesson();\n            }, 3000);\n        });\n    };\n\n    recognition.onspeechend = function() {\n        if (speechRecognitionActive) {\n            recognition.stop();\n            speechRecognitionActive = false;\n            showRecognitionLoader(false);\n        }\n    };\n\n    recognition.onerror = function(event) {\n        showRecognitionLoader(false);\n        speechRecognitionActive = false;\n        let errorMessage = 'Error: ' + event.error;\n\n        if (event.error === 'not-allowed') {\n            errorMessage = \"Microphone access was not allowed. Please allow microphone access in your browser settings and try again.\";\n        }\n\n        appendMessage(errorMessage, 'bot');\n\n        const chatMessages = document.getElementById('chat-messages');\n        chatMessages.innerHTML = '';\n\n        const retryMessage = \"Let's try that question again.\";\n        appendMessage(retryMessage, 'bot');\n        showSynthesisLoader(true);\n        sayText(retryMessage, \"en-US\").then(() => {\n            showSynthesisLoader(false);\n            setTimeout(() => {\n                listenUserResponse(question);\n            }, 3000);\n        });\n    };\n }\n\n \/\/ Analyze response using keywords\n function analyzeResponse(userInput, keywords) {\n    const lowerCaseInput = userInput.toLowerCase();\n    for (let keyword of keywords) {\n        if (lowerCaseInput.includes(keyword.toLowerCase())) {\n            \/\/ sometimes trigger pronunciation feedback on key vocabulary\n            if (keyword.toLowerCase().includes(\"laundry\") || keyword.toLowerCase().includes(\"ironing\")) {\n                return \"pronunciation\";\n            }\n            return \"positive\";\n        }\n    }\n    return \"constructive\";\n }\n\n \/\/ Simple grammar help for present continuous with this vocabulary\n function checkGrammar(userInput) {\n    const lower = userInput.toLowerCase();\n\n    if (lower.includes(\"i am make dinner\") || lower.includes(\"i am make a cake\") || lower.includes(\"i am make coffee\")) {\n        return 'You can say: \"I am making dinner \/ a cake \/ a cup of coffee.\" or \"I\u2019m making dinner \/ a cake \/ a cup of coffee.\"';\n    }\n    if (lower.includes(\"i am do the laundry\")) {\n        return 'You can say: \"I am doing the laundry.\" or \"I\u2019m doing the laundry.\"';\n    }\n    if (lower.includes(\"i am do the dishes\") || lower.includes(\"i am wash the dishes\")) {\n        return 'You can say: \"I am doing the dishes.\" or \"I\u2019m doing the dishes.\"';\n    }\n    if (lower.includes(\"i am clean the house\") || lower.includes(\"i am do the cleaning\")) {\n        return 'You can say: \"I am doing the cleaning.\" or \"I\u2019m cleaning the house.\"';\n    }\n    if (lower.includes(\"i am study english\")) {\n        return 'You can say: \"I am studying English this semester.\" or \"I\u2019m studying English this month.\"';\n    }\n\n    return null;\n }\n\n function checkStopKeywords(userInput) {\n    const pattern = new RegExp('\\\\b(' + stopKeywords.join('|') + ')\\\\b', 'i');\n    return pattern.test(userInput);\n }\n\n function normalizeAndFormatUserInput(text) {\n    let normalized = text.replace(\/\\bi\\b\/g, \"I\");\n    return formatSentence(normalized);\n }\n\n function formatSentence(text) {\n    if (!text) return text;\n    text = text.charAt(0).toUpperCase() + text.slice(1);\n\n    const questionWords = ['who', 'what', 'where', 'when', 'why', 'how', 'is', 'are', 'do', 'does', 'can', 'should', 'will', 'would'];\n    const firstWord = text.split(\" \")[0].toLowerCase();\n\n    if (questionWords.includes(firstWord) && !text.endsWith('?')) {\n        text += '?';\n    } else if (!text.endsWith('.') && !text.endsWith('?')) {\n        text += '.';\n    }\n\n    return text;\n }\n\n function addSentenceToBox(sentence) {\n    const wordBox = document.getElementById('word-box');\n    const sentenceElement = document.createElement('div');\n    sentenceElement.innerText = sentence;\n    wordBox.appendChild(sentenceElement);\n    wordBox.scrollTop = wordBox.scrollHeight;\n }\n\n function clearWordBox() {\n    const wordBox = document.getElementById('word-box');\n    wordBox.innerHTML = \"\";\n }\n\n function endLesson(userStopped = false) {\n    if (speechSynthesisSupported) {\n        window.speechSynthesis.cancel();\n    }\n\n    if (recognition && speechRecognitionActive) {\n        recognition.stop();\n        speechRecognitionActive = false;\n    }\n\n    isLessonActive = false;\n\n    let message;\n    if (userStopped) {\n        message = \"Thank you for practicing! Goodbye!\";\n    } else {\n        message = \"Well done! You\u2019ve completed all the questions. Keep practicing these housework and everyday activity phrases!\";\n    }\n    appendMessage(message, \"bot\");\n    showSynthesisLoader(true);\n    sayText(message, \"en-US\").then(() => {\n        showSynthesisLoader(false);\n    });\n }\n\n function sayText(text, lang) {\n    return new Promise((resolve) => {\n        if (!speechSynthesisSupported) {\n            resolve();\n            return;\n        }\n        const utterance = new SpeechSynthesisUtterance(text);\n        utterance.lang = lang;\n        utterance.rate = 1.0;\n        utterance.pitch = 1.0;\n\n        if (selectedVoice) {\n            utterance.voice = selectedVoice;\n        }\n\n        utterance.onend = function() {\n            resolve();\n        };\n\n        utterance.onerror = function(event) {\n            console.error('Speech synthesis error:', event.error);\n            resolve();\n        };\n\n        window.speechSynthesis.speak(utterance);\n    });\n }\n\n function appendMessage(text, sender) {\n    const messageContainer = document.getElementById('chat-messages');\n    const messageElement = document.createElement('div');\n    messageElement.classList.add('message');\n    messageElement.classList.add(sender === 'bot' ? 'bot-message' : 'user-message');\n    messageElement.innerText = text;\n    messageContainer.appendChild(messageElement);\n    messageContainer.scrollTop = messageContainer.scrollHeight;\n }\n\n function showSynthesisLoader(show) {\n    const loader = document.getElementById('synthesis-loader');\n    loader.style.display = show ? 'inline-block' : 'none';\n    if (show) {\n        loader.style.borderTop = '4px solid #17a2b8';\n    }\n }\n\n function showRecognitionLoader(show) {\n    const loader = document.getElementById('synthesis-loader');\n    if (show) {\n        loader.style.display = 'inline-block';\n        loader.style.borderTop = '4px solid #ffc107';\n    } else {\n        loader.style.display = 'none';\n    }\n }\n\n window.onload = initialize;\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>This Robot is used for practicing English at level A2. In order to interact with this Robot smoothly, please use<\/p>\n","protected":false},"author":1,"featured_media":281,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[18,5],"tags":[],"class_list":["post-279","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-a2","category-chatbot"],"_links":{"self":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/comments?post=279"}],"version-history":[{"count":4,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/279\/revisions"}],"predecessor-version":[{"id":318,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/279\/revisions\/318"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media\/281"}],"wp:attachment":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media?parent=279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/categories?post=279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/tags?post=279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}