Greasy Fork is available in English.

Vk Recent Smiles Panel

USABILITY

// ==UserScript==
// @name         Vk Recent Smiles Panel
// @namespace    https://vk.com
// @version      0.1
// @description  USABILITY
// @author       Efog
// @match        https://vk.com/*
// @unmatch      https://vk.com/notifier.php*
// @require      https://code.jquery.com/jquery-2.2.4.min.js
// @grant        none
// ==/UserScript==

(() => {
    'use strict';

    setInterval(() => {
        if (/\/notifier.php/.test(location.href))
            return;

        if (!/\/im\?sel/.test(location.href))
            return;

        var panel = $('#recent-smiles');
        if (panel.length === 0) {
            console.info('Adding recent smiles...');

            var btn = $('._emoji_btn');

            panel = $('<div id="recent-smiles"></div>').appendTo($('.im-chat-input--txt-wrap'));
            Emoji.show(btn[0], null);

            setTimeout(() => {
                Emoji.hide(btn[0], null);

                setTimeout(() => {
                    smile(panel);

                    panel.css({
                        float: 'right',
                        marginTop: '10px'
                    });
                });
            }, 50);
        }
    }, 100);

    setInterval(() => {
        if (/\/notifier.php/.test(location.href))
            return;

        var panel = $('#recent-smiles');
        if (panel.length) {
            smile(panel);
        }
    }, 5000);

    function smile(panel) {
        var recent = $('.emoji_cat_title_helper[data-id="-1"]').eq(0).next('.emoji_smiles_row').children();

        setTimeout(() => {
            if (!/\/im\?sel/.test(location.href))
                return;

            var recent = $('.emoji_cat_title_helper[data-id="-1"]').eq(0).next('.emoji_smiles_row').children().clone(true);
            recent.each((i, emoji) => {
                emoji = $(emoji);
                emoji.attr('onmousedown', 'Emoji.shownId = data(domPN($(".emoji_smile._emoji_btn")[0]), "optId"); ' + emoji.attr('onmousedown').replace('return cancelEvent(event);', 'Emoji.shownId = false; return cancelEvent(event);'));
            });

            panel.html('').append(recent.slice(0, 10));
        });
    }
})();