NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Web Sticker Keywords // @namespace http://tampermonkey.net/ // @version 1.7 // @description Подсказки с https://vk.com/sticker_keywords_editor теперь на vk.com :3 // @author Flyink13 // @match https://vk.com/* // @updateURL https://openuserjs.org/meta/flyink13/Web_Sticker_Keywords.meta.js // @copyright 2018, flyink13 (https://openuserjs.org/users/flyink13) // @license MIT // ==/UserScript== /* global vk, Emoji, stickersKeywords */ /* Полезности: Emoji.updateStickersHints - отрисовка панели подсказок Emoji.checkStickersKeywords - поиск подсказок Emoji.stickers - список наборов window.promotedStickerUrls - Ссылки на изображения по id стикера window.stickersKeywordsData - Список подсказок {promoted_stickers, user_stickers, words} window.stickersKeywords - Обьект по ключевым словам Добавление к стикеру 3484 ключевого слова 42: if (!stickersKeywords[42]) stickersKeywords[42] = []; stickersKeywords[42].push(3484); window.promotedStickerUrls[3484] = '/images/stickers/3484/128.png' */ function UserStickerKeywords() { var user_docs; if (/^\/(away|notifier)\.php/.test(window.location.pathname) || typeof vk !== 'object') return; user_docs = []; function get(url, cb, anon) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); if (anon) xhr.withCredentials = false; xhr.onload = function onGetLoaded() { cb(xhr.responseText); xhr = null; }; xhr.send(); } function toDocId(id) { var owner_id = -131495752; if (user_docs.indexOf(-id) > -1) owner_id = vk.id; if (id > 0) return id; var doc_id = owner_id + '_' + -id; var attach_id = "'-,doc:" + doc_id + ",'"; window.promotedStickerUrls[attach_id] = '/doc' + doc_id + '?api=1'; return attach_id; } function addUserKeywords() { if (typeof promotedStickerUrls != 'object' || typeof stickersKeywords != 'object') return; if (stickersKeywords.ske == 3484) return; stickersKeywords.ske = 3484; Emoji.userDictionary.forEach(function addDictionary(dict) { dict.words.forEach(function addWord(word) { if (!stickersKeywords[word]) stickersKeywords[word] = []; dict.user_stickers.forEach(function addSticker(sticker_id) { sticker_id = toDocId(sticker_id); if (stickersKeywords[word].indexOf(sticker_id) > -1) return; stickersKeywords[word].unshift(sticker_id); }); }); }); console.log('ske', 'addUserKeywords'); } function initKeywords(dictionary) { if (typeof Emoji !== 'object') return console.log('var Emoji 404'); // Отключаем логирование, там ошибки Emoji.sendHintsLog = Emoji.clearHintsLog; // Запоминаем подсказки пользователя Emoji.userDictionary = dictionary.response.dictionary; // Добавляем добавление своих подсказок в функцию установки подсказок и запускаем ее Emoji.addUserKeywords = addUserKeywords; Emoji.setStickersKeywords = (function(org) { return function() { var res = org.apply(this, arguments); if (window.promotedStickerUrls) { window.promotedStickerUrls[2e9] = "https://NaN"; } Emoji.addUserKeywords(); return res; }; })(Emoji.setStickersKeywords); Emoji.initStickersKeywords(); // добавляем в генерацию подсказок стикеров поддержку граффити Emoji.render.stickerHintRs = (function(org) { return function() { var oid = arguments[0]; var sid = arguments[1]; var res = org.apply(this, arguments); if (!res && sid && sid[0] == "'") { var tmlp = org(oid, -2e9); var surl = window.promotedStickerUrls[sid]; if (!tmlp) { console.warn('Web Sticker Keywords: invalid hint template'); return res; } res = tmlp.replace(' promo', '').replace(/http.+?(['"])/g, surl + '&$1').replace(/-2000000000/g, sid); return res; } return res; }; })(Emoji.render.stickerHintRs); } get('https://jsons.flyink.ru/' + vk.id + '.json?r=' + Math.random(), function onKeysLoaded(keywords) { get('/docs.php?al=-1&type=4', function onDocsLoaded(docs) { user_docs = (docs.match(/\[\\"(\d+)/g) || []).map(function parseIds(id) { return parseInt(id.match(/\[\\"(\d+)/)[1], 10); }); initKeywords(JSON.parse(keywords)); }); }, 1); if (typeof FlyVK == 'object' && FlyVK.module) FlyVK.module.loaded('oujs_Web_Sticker_Keywords.user.js', UserStickerKeywords, {}); } (function injectScript() { var script = document.createElement('script'); script.appendChild(document.createTextNode('(' + UserStickerKeywords + ')();')); (document.body || document.head || document.documentElement).appendChild(script); })();