// ==UserScript== // @name VK slaps // @namespace Violentmonkey Scripts // @description slap everyone who are online on vk.com by typing '@here' or '*here' and press Tab button // @version 1.02 // @require https://code.jquery.com/jquery-3.2.1.min.js // @match https://vk.com/* // @grant none // @downloadURL none // ==/UserScript== // add callback when '@here' or '*here' is typed and Tab key it pressed $(".im_editable.im-chat-input--text._im_text").on("keyup", function (e) { if (e.which == 9 && (e.target.textContent == '@here' || e.target.textContent == '*here')) { my.setOnlineMembers(); } }) my = { setOnlineMembers: function () { onlineMembers = []; // open members list $('._im_chat_members.im-page--members').click(); // wait untill list loaded var checkExist = setInterval(function() { if ($('.im-member-item--left > .im-member-iterm--status').length) { console.log("Exists!"); clearInterval(checkExist); setOnlineMembers(); } }, 500); function setOnlineMembers() { // get all online members $onlineMembersElements = $('.im-member-item--left > .im-member-iterm--status') .filter(function(){if ($(this).text()==='online') return $(this)}) .prev() .children(); let onlineMembersElementIds = $onlineMembersElements.map(function() { return $(this).attr('href').replace('/', '@')}); let onlineMembersElementNames = $onlineMembersElements.map(function() { return '(' + $(this).text().split(' ')[0] + ')'}); // get array of final string with online members for (let i = 0; i < onlineMembersElementIds.length; i++) { onlineMembers.push(onlineMembersElementIds[i] + ' ' + onlineMembersElementNames[i]); } // close members list $('.box_x_button').click(); // add online members to input field $('.im_editable.im-chat-input--text._im_text').click(); $('.im_editable.im-chat-input--text._im_text').text(onlineMembers.join(' ')); } } };