sijuz / VK Skype

// ==UserScript==
// @name         VK Skype
// @namespace    https://vk.com/0id00000000000000000000000000000
// @version      1.2
// @description  Голосовые сообщения текстом
// @author       Алексей Иванов
// @match        https://vk.com/*
// @grant        none
// @license MIT
// ==/UserScript==

//==OpenUserJs==
//@author sijuz
//==/OpenUserJs==

(function() {
    'use strict';
    setTimeout(function() {
        function find(array, value) {
  if (array.indexOf) { // если метод существует
    return array.indexOf(value);
  }

  for (var i = 0; i < array.length; i++) {
    if (array[i] === value) return i;
  }

  return -1;
}

        let m1 = [0];
        let isStoped = false;
        let btnElem;
        function btn_click_start() {
            if (isStoped) {
                btnElem.innerText = 'Начать';
            } else {
                btnElem.innerText = 'Остановить';
            }
            isStoped = !isStoped;
            if (isStoped) {
                start();
            }
        }

        function stop(r) {
            console.log('сброс');
            r.stop();
            if (isStoped) {
                start();
            }
        }

        function start() {
            var recognizer = new webkitSpeechRecognition();

            recognizer.interimResults = true;
            recognizer.lang = 'ru-Ru';

            recognizer.onaudiostart = function() {
                console.log('начинаю слушать');
            }
            recognizer.onnomatch = function() {
            console.log('Speech not recognised');
            }
            recognizer.onsoundstart = function() {
                console.log('начинаю распозновать');
            }
            recognizer.onend = function() {
                console.log('Распознование остановленно');
            }
            recognizer.onsoundend = function() {
                stop(recognizer);
                console.log('Ничего не распознанно');
            }
            recognizer.onnomatch = function() {
                stop(recognizer);
            }
            recognizer.onresult = function (event) {
                var result = event.results[event.resultIndex];
                if (result.isFinal) {
                    stop(recognizer);
                    document.querySelector('.im-chat-input--text').focus();
                    document.querySelector('.im-chat-input--text').innerText = result[0].transcript;
                    document.querySelector('.im-chat-input--text').click();
                    document.querySelector('.im-chat-input--text').focus();
                    document.querySelector('.im-send-btn').classList.remove("im-send-btn_audio");
                    document.querySelector('.im-send-btn').classList.add('im-send-btn_send');
                    document.querySelector('.im-send-btn').focus();
                    document.querySelectorAll('.im-send-btn')[document.querySelectorAll('.im-send-btn').length-1].click();
                    var evt = new Event('mouseover');
                    document.querySelector('.im-send-btn').dispatchEvent(evt);
                    console.log('Вы сказали: ' + result[0].transcript);
                } else {
                    document.querySelector('.im-chat-input--text').focus();
                    document.querySelector('.im-chat-input--text').innerText = result[0].transcript;
                    document.querySelector('.im-chat-input--text').focus();
                    document.querySelector('.im-chat-input--text').click();
                }
            };
            recognizer.start();
        }

        function timeIs() {
            let len = document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker').length-1;
            if (document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len]) {
                if(document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].getAttribute('aria-label') === 'Сообщение не прочитано' || document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].getAttribute('aria-label') === 'Unread message') {
                    let s = document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].parentNode.getAttribute('data-msgid');
                    if (find(m1,s) == -1) {
                        console.log('новое сообщение');
                        m1.push(document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].parentNode.getAttribute('data-msgid'));
                        if (document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].parentNode.querySelector('._im_log_body')) {
                            var msg = new SpeechSynthesisUtterance();
                            msg.volume = 1; // 0 to 1
                            msg.rate = 2; // 0.1 to 10
                            msg.pitch = 0; //0 to 2
                            msg.text = document.querySelectorAll('li._im_mess:not(.im-mess_out) span._im_mess_blind_unread_marker')[len].parentNode.querySelector('._im_log_body').innerText;
                            msg.lang = 'ru-RU';
                            speechSynthesis.speak(msg);
                        }
                    }
                }
            }
        }
        let sss = setInterval(timeIs, 1500);

        setInterval(timeIs, 1500);

        var elem1 = document.createElement("button");
        var elemText1 = document.createTextNode("Начать");
        elem1.appendChild(elemText1);
        elem1.setAttribute('class','flat_button');
        document.querySelector('#side_bar').appendChild(elem1);

        document.querySelector('.im_chat-input--buttons').appendChild(elem1);

        btnElem = elem1;
        elem1.addEventListener('click', btn_click_start, false);

        function started() {
            m1 = [0];
            console.log('Полный перезапуск');
        }

        let ll = document.querySelectorAll('li.nim-dialog');
        for (var i = 0; i < ll.length; i++) {
            ll[i].addEventListener('click', started, false);
        }
    },2000)

})();