VK slaps

It slaps everyone who are online on vk.com by typing '@here' or '*here' and press Ctrl button. It slaps everyone who are online, without who are on mobile now, on vk.com by typing '@herem' or '*herem' and press Ctrl button.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name VK slaps
// @namespace https://greasyfork.org/en/users/159342-cleresd
// @description It slaps everyone who are online on vk.com by typing '@here' or '*here' and press Ctrl button. It slaps everyone who are online, without who are on mobile now, on vk.com by typing '@herem' or '*herem' and press Ctrl button.
// @version 1.06
// @require https://code.jquery.com/jquery-3.2.1.min.js
// @match https://vk.com/*
// @grant none
// ==/UserScript==

// add callback when '@here' or '*here' is typed and Ctrl key it pressed
let $inputMessage = $("div.im_editable.im-chat-input--text._im_text");
$inputMessage.on("keyup", (e) => {
    if (e.which === 17 && (e.target.textContent === '@here' || e.target.textContent === '*here')) {
        let predicateForMembersOnline = (_, el) => $(el).text() === 'online';
        my.setOnlineMembers(predicateForMembersOnline);
    }
    if (e.which === 17 && (e.target.textContent === '@herem' || e.target.textContent === '*herem')) {
        let predicateForMembersOnlineAndNotMobile = (_, el) => $(el).text() === 'online' && !$(el).children().length;
        my.setOnlineMembers(predicateForMembersOnlineAndNotMobile);
    }
});

window.my = {
    setOnlineMembers: function (predicateForMembers) {
        let onlineMembers = [];

        // open members list
        $('button._im_chat_members.im-page--members').click();

        // wait until list loaded
        let checkExist = setInterval(() => {
            if ($('div.im-member-item--left > div.im-member-iterm--status').length) {
                clearInterval(checkExist);
                setOnlineMembers(predicateForMembers);
            }
        }, 500);

        function setOnlineMembers(predicateForMembers) {
            // get all online members
            let $onlineMembersElements = $('div.im-member-item--left > div.im-member-iterm--status')
                .filter(predicateForMembers)
                .prev()
                .children();

            let onlineMembersElementIds = $onlineMembersElements.map((_, el) => $(el).attr('href').replace('/', '@'));
            let onlineMembersElementNames = $onlineMembersElements.map((_, el) => '(' + $(el).text().split(' ')[0] + ')');

            // get array of final string with online members
            let theCallerPersonId = $('#top_profile_link').attr('href').replace('/', '@');
            for (let i = 0; i < onlineMembersElementIds.length; i++) {
                if (onlineMembersElementIds[i] !== theCallerPersonId)
                    onlineMembers.push(onlineMembersElementIds[i] + ' ' + onlineMembersElementNames[i]);
            }

            // close members list
            $('div.box_x_button').click();

            // add online members to input field
            $('div.im_editable.im-chat-input--text._im_text').click().text(onlineMembers.join(' ')).click();
        }
    }
};