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);
})();