Загрузка...

Utility
LZTGIF - Saving GIFs in chat

Thread in Extentions created by Корги Dec 4, 2025. (bumped Dec 10, 2025) 917 views

  1. Корги
    [IMG]

    LZTGIF
    Сохранение GIF в чате

    • Просмотр сохранненого медиа
    • Удобное сохранение
    • Быстрая отправка
    [IMG]

    Нажимаем ПКМ на GIF / Медиа
    Для работы необходим Tampermonkey
    Установить Поддержка
     
    This article was useful for you?
    You can thank the author of the topic by transferring funds to your balance
    Thank the author
  2. Корги
    Обновление v5.0

    — Возможность перетянуть медиа в окно с GIF для его добавления
    — Импорт / Экспорт конфига с GIF
    Позволяет делиться своими паками GIF
    Закрепление GIF для отображения их сверху
    Адаптация под стили (2024 и 2024 Dark)

    Обновить
     
  3. modafinil
    ЛАЙК ПРОСТО ИМБААА ЛУЧШЕЕ ДОПОЛНЕНИЕ УРА РЕСПЕКТ ГИФКИ ВАУ
     
  4. llimonix
    llimonix Dec 4, 2025
    Telegram: View @XomiachiyNovostnik
    29,127 Jan 20, 2020
    Хоть что-то стоящее за последнее время :pigyes: Респект Корга
     
  5. Шейх
    Так вот что ты в ДСке делал, очень круто
     
  6. пэченка
    пэченка Dec 4, 2025 всё будет хорошо:mishkalove2: 13,875 May 3, 2020
    единственно что я буду использовать, годно!
     
  7. unblock
    Самое нужное что наконец-то сделали, респект за труд
     
  8. God_likeGL
    God_likeGL Layer 1 Dec 4, 2025 Лучшие сервера: lolz.live/threads/5071761/ :+rep: 35,783 Oct 30, 2018
    :newyeargirl: [IMG]

    А как сохранять то?
     
    1. View previous comments (10)
    2. God_likeGL Layer 1
      :newyeargirl: avatarllimonix , [IMG]

      Появляется если ПКМ по ответу с медиа
    3. unblock
      avatarGod_likeGL Layer 1 , проблемы на твоей стороне у всех ворк норм
  9. лирика
    лирика Dec 4, 2025 лучшая шмаль на районе
    Telegram: Join Group Chat
    340 Nov 25, 2024
    вкусно выглядит, а лимитов как в тг не будет? по типу 200 гиф без премиума край
     
    1. Корги Topic starter
    2. 555
      avatarлирика, новокек 1 гифка, местный 5, постоялец 10, эксперт 25, гуру 50, ИИ/Уник 100
  10. ПитерГриффин
    Почему это не обновлением формуа?
     
  11. 555
    корга красавица, ждем когда реализуют полноценно, крутое дополнение
     
  12. God_likeGL
    God_likeGL Layer 1 Dec 4, 2025 Лучшие сервера: lolz.live/threads/5071761/ :+rep: 35,783 Oct 30, 2018
    Исправленная версия если у кого-то как у меня не отображалась кнопка сохранения ГИФ
    так же боковое меню с сохранёнными ГИФ стало полупрозрачным, исправил Соннет 4,5
    JS
    // ==UserScript==
    // @name LZTGIF
    // @namespace https://lolz.live/
    // @version 4.4
    // @description Панель с избранными GIF слева от чата
    // @author https://lolz.live/corgi
    // @match https://lolz.live/*
    // @grant GM_setValue
    // @grant GM_getValue
    // @license MIT
    // @run-at document-idle
    // @require https://code.jquery.com/jquery-3.6.0.min.js
    // @downloadURL https://update.greasyfork.org/scripts/557831/LZTGIF.user.js
    // @updateURL https://update.greasyfork.org/scripts/557831/LZTGIF.meta.js
    // ==/UserScript==

    (function () {
    'use strict';

    const STORAGE_KEY = 'lzt_my_gifs';
    let myGifs = new Set(GM_getValue(STORAGE_KEY, []));

    const $body = $('body');
    let $sidebar = null;
    let $grid = null;
    const SVG_ICON = `<svg width="23" height="18" viewBox="0 0 23 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.25 0.75H2.25C1.42157 0.75 0.75 1.42157 0.75 2.25V15.25C0.75 16.0784 1.42157 16.75 2.25 16.75H20.25C21.0784 16.75 21.75 16.0784 21.75 15.25V2.25C21.75 1.42157 21.0784 0.75 20.25 0.75Z" stroke="#8C8C8C" stroke-width="1.5"/><path d="M18.75 5.83301V6.04688H14.668V8.83301H18.1348V8.97266H14.668V11.6582H14.4707V5.83301H18.75Z" fill="black" stroke="#8C8C8C"/><path d="M11.9419 5.83301V11.6582H11.7368V5.83301H11.9419Z" fill="black" stroke="#8C8C8C"/><path d="M6.77344 5.75C6.95581 5.75001 7.13839 5.76166 7.32129 5.78516L7.3291 5.78613C7.51157 5.80673 7.69013 5.8406 7.86523 5.88672H7.86719C8.04404 5.93274 8.21489 5.99129 8.37988 6.0625L8.38867 6.06641C8.40893 6.07473 8.42827 6.08501 8.44824 6.09375L8.35742 6.26562C8.22013 6.20861 8.07718 6.16003 7.92773 6.12207L7.92871 6.12109C7.75636 6.07387 7.57785 6.03884 7.39453 6.01562H7.39551C7.21575 5.99252 7.03467 5.98145 6.85254 5.98145C6.53627 5.98145 6.23576 6.01695 5.9541 6.0918L5.67871 6.17969C5.32871 6.30932 5.02062 6.49738 4.76465 6.74902C4.51012 6.99624 4.31859 7.2921 4.18848 7.62891C4.05819 7.96605 3.99609 8.32825 3.99609 8.70898C3.99615 9.10191 4.06126 9.47469 4.19727 9.82129C4.33185 10.1643 4.52613 10.4667 4.78125 10.7217C5.03654 10.9767 5.34097 11.173 5.6875 11.3125L5.69238 11.3135C6.04787 11.4528 6.43415 11.5185 6.84473 11.5186C7.17163 11.5186 7.48278 11.4771 7.77344 11.3877L7.7793 11.3857C8.06541 11.2942 8.3254 11.1618 8.55273 10.9854C8.77978 10.8091 8.96609 10.5952 9.10938 10.3467L9.11133 10.3438C9.25522 10.0902 9.34721 9.81216 9.39062 9.51465L9.47168 8.95508V9.65039L9.48828 9.62988C9.45919 9.7881 9.41983 9.94024 9.36621 10.0859V10.0879C9.27771 10.3317 9.15539 10.5548 9 10.7588V10.7598C8.8851 10.9106 8.75268 11.046 8.60254 11.167L8.4502 11.2803C8.23676 11.4241 7.98846 11.54 7.70215 11.626C7.42466 11.7064 7.11236 11.75 6.76172 11.75C6.27014 11.75 5.84664 11.6665 5.48242 11.5107H5.4834C5.10962 11.3499 4.79972 11.1347 4.54785 10.8652C4.29308 10.5928 4.0952 10.271 3.95605 9.89648C3.81959 9.52211 3.75003 9.11862 3.75 8.68262C3.75 8.25742 3.81874 7.86849 3.95215 7.5127L3.95312 7.51172C4.08602 7.15486 4.27703 6.85057 4.52637 6.59375C4.77344 6.33927 5.08149 6.13343 5.45898 5.97949L5.45801 5.97852C5.82598 5.82939 6.26188 5.75 6.77344 5.75ZM9.47168 8.80273V8.94238H7.33398V8.80273H9.47168Z" fill="black" stroke="#8C8C8C"/></svg>`;
    let chatTag = '.chat2-floating';

    const isChatbox = /^https?:\/\/lolz\.live\/chatbox\/?.*$/.test(window.location.href);
    if (isChatbox) {
    chatTag = '.chat2[type="full"]';
    }

    // ====================== СТИЛИ ======================
    const css = `
    #lzt-gif-sidebar{position:absolute;top:-1px;bottom:0;left:-360px;width:360px;background:rgba(28,28,28,0.85);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);z-index:9999;
    transition:left .35s cubic-bezier(.25,.8,.25,1);border-radius:10px 0 0 10px;display:none}
    #lzt-gif-sidebar.open{display:block}
    .lzt-gif-header{height:56px;padding:0 20px;display:flex;align-items:center;justify-content:space-between;
    background:#303030;border-top-left-radius:10px}
    .lzt-gif-title{display:flex;align-items:center;gap:12px;color:#fff}
    .lzt-gif-content{height:calc(100% - 88px);overflow-y:auto;padding:15px;border:1px solid #363636;
    border-bottom-left-radius:10px;border-bottom-right-radius:10px}
    .lzt-gif-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
    .lzt-gif-item{position:relative;border-radius:10px;overflow:hidden;cursor:pointer;
    box-shadow:0 4px 12px rgba(0,0,0,.5)}
    .lzt-gif-item img{width:100%;height:100px;object-fit:contain;display:block;transition:transform .3s;background:#000}
    .lzt-gif-item:hover img{transform:scale(1.08)}
    .lzt-gif-delete{position:absolute;top:6px;right:6px;width:28px;height:28px;background:rgba(0,0,0,.7);
    color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;
    opacity:0;transition:opacity .2s;cursor:pointer}
    .lzt-gif-item:hover .lzt-gif-delete{opacity:1}
    .lzt-gif-empty{text-align:center;padding-top:120px;color:#888;font-size:14px}
    .lzt-gif-add .Svg-Icon{display:flex;align-items:center;gap:10px;}
    .lzt-gif-add .Svg-Icon svg path {stroke:#505050;}
    .chat2-header,.chat2-floating{border-top-left-radius:0 !important}
    #lzt-gif-btn{margin-left:8px;cursor:pointer;padding:8px;border-radius:8px;transition:background .2s;display:flex;align-items:center;justify-content:center;}
    #lzt-gif-btn:hover{background:rgba(255,255,255,.1)}
    .lzt-gif-header-actions{display:flex;align-items:center;justify-content:center;gap:10px;height:100%;}
    .lzt-gif-header-actions a{display:flex;align-items:center;justify-content:center;width:20px;height:20px;}
    .lzt-gif-content{scrollbar-width:none;-ms-overflow-style:none}.lzt-gif-content::-webkit-scrollbar{display:none;width:10px;height:10px;background:transparent}.lzt-gif-content::-webkit-scrollbar-track{background:transparent;border-radius:10px}.lzt-gif-content::-webkit-scrollbar-thumb{background:rgba(148,148,148,0.4);border-radius:10px;border:2px solid transparent;background-clip:content-box}.lzt-gif-content:hover::-webkit-scrollbar-thumb{background:rgba(148,148,148,0.7)}.lzt-gif-content::-webkit-scrollbar-thumb:active{background:rgba(148,148,148,0.9)}.lzt-gif-content::-webkit-scrollbar-corner{background:transparent}
    .chat2[type="full"] #lzt-gif-sidebar{min-width:320px;position:relative;top:unset;left:unset;right:unset;}
    .chat2[type="full"]:has(#lzt-gif-sidebar.open) {display: flex;}
    .chat2[type="full"]:has(#lzt-gif-sidebar.open) .chat2-full-inner {flex:1;}
    .chat2[type="full"] .lzt-gif-header{height:62px;}
    .chat2[type="full"] .lzt-gif-content{height:calc(100% - 92px);}
    `;
    $('<style>').text(css).appendTo('head');

    // ====================== СОЗДАНИЕ САЙДБАРА ======================
    function createSidebar() {
    if ($sidebar) return;

    const $chat = $(chatTag);
    if (!$chat.length) return;

    $('#lzt-gif-sidebar').remove();

    $sidebar = $(`
    <div id="lzt-gif-sidebar">
    <div class="lzt-gif-header">
    <div class="lzt-gif-title">
    ${SVG_ICON}
    Мои GIF
    </div>
    <div class="lzt-gif-header-actions">
    <div class="lzt-bug-report">
    <a href="https://lolz.live/corgi" target="_blank">
    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 640 640"><path fill="#949494" d="M224 160C224 107 267 64 320 64C373 64 416 107 416 160L416 163.6C416 179.3 403.3 192 387.6 192L252.5 192C236.8 192 224.1 179.3 224.1 163.6L224.1 160zM569.6 172.8C580.2 186.9 577.3 207 563.2 217.6L465.4 290.9C470.7 299.8 474.7 309.6 477.2 320L576 320C593.7 320 608 334.3 608 352C608 369.7 593.7 384 576 384L480 384L480 416C480 418.6 479.9 421.3 479.8 423.9L563.2 486.4C577.3 497 580.2 517.1 569.6 531.2C559 545.3 538.9 548.2 524.8 537.6L461.7 490.3C438.5 534.5 395.2 566.5 344 574.2L344 344C344 330.7 333.3 320 320 320C306.7 320 296 330.7 296 344L296 574.2C244.8 566.5 201.5 534.5 178.3 490.3L115.2 537.6C101.1 548.2 81 545.3 70.4 531.2C59.8 517.1 62.7 497 76.8 486.4L160.2 423.9C160.1 421.3 160 418.7 160 416L160 384L64 384C46.3 384 32 369.7 32 352C32 334.3 46.3 320 64 320L162.8 320C165.3 309.6 169.3 299.8 174.6 290.9L76.8 217.6C62.7 207 59.8 186.9 70.4 172.8C81 158.7 101.1 155.8 115.2 166.4L224 248C236.3 242.9 249.8 240 264 240L376 240C390.2 240 403.7 242.8 416 248L524.8 166.4C538.9 155.8 559 158.7 569.6 172.8z"/></svg>
    </a>
    </div>
    <div class="lzt-gif-close">
    <a>
    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 640 640"><path fill="#949494" d="M183.1 137.4C170.6 124.9 150.3 124.9 137.8 137.4C125.3 149.9 125.3 170.2 137.8 182.7L275.2 320L137.9 457.4C125.4 469.9 125.4 490.2 137.9 502.7C150.4 515.2 170.7 515.2 183.2 502.7L320.5 365.3L457.9 502.6C470.4 515.1 490.7 515.1 503.2 502.6C515.7 490.1 515.7 469.8 503.2 457.3L365.8 320L503.1 182.6C515.6 170.1 515.6 149.8 503.1 137.3C490.6 124.8 470.3 124.8 457.8 137.3L320.5 274.7L183.1 137.4z"/></svg>
    </a>
    </div>
    </div>
    </div>
    <div class="lzt-gif-content">
    ${myGifs.size === 0
    ? `<div class="lzt-gif-empty">Пока пусто<br><small style="color:#666;">ПКМ → Сохранить GIF</small></div>`
    : `<div class="lzt-gif-grid"></div>`
    }
    </div>
    </div>
    `).prependTo($chat);

    $sidebar.find('.lzt-gif-close').on('click', () => $sidebar.removeClass('open'));

    if (myGifs.size > 0) {
    $grid = $sidebar.find('.lzt-gif-grid');
    myGifs.forEach(url => addGifItem(url));
    }
    }

    // ====================== ДОБАВЛЕНИЕ GIF В САЙДБАР ======================
    function addGifItem(url) {
    if (!$grid) {
    createSidebar();
    if ($sidebar.find('.lzt-gif-empty').length) {
    $sidebar.find('.lzt-gif-content').html('<div class="lzt-gif-grid"></div>');
    }
    $grid = $sidebar.find('.lzt-gif-grid');
    }

    const $item = $(`
    <div class="lzt-gif-item">
    <img src="${url}" loading="lazy">
    <div class="lzt-gif-delete">×</div>
    </div>
    `).appendTo($grid);

    $item.find('img').on('click', () => {
    const $input = $(`${chatTag} .editor-box.editor-content p`);
    if ($input.length) {
    $input.text(url);
    setTimeout(() => $(`${chatTag} [aria-label="send-message"]`).trigger('click'), 200);
    }
    });

    $item.find('.lzt-gif-delete').on('click', e => {
    e.stopPropagation();
    myGifs.delete(url);
    GM_setValue(STORAGE_KEY, Array.from(myGifs));
    $item.remove();

    if (myGifs.size === 0) {
    $sidebar.find('.lzt-gif-content')
    .html(`<div class="lzt-gif-empty">Пока пусто<br><small style="color:#666;">ПКМ → Сохранить GIF</small></div>`);
    $grid = null;
    }
    });
    }

    // ====================== КНОПКА ======================
    function addButton() {
    if ($('#lzt-gif-btn').length) return;

    const $wrapper = $(`${chatTag} .editor-box-wrapper`);
    if (!$wrapper.length) return;

    $('<div>', {
    id: 'lzt-gif-btn',
    title: 'Мои избранные GIF',
    html: SVG_ICON
    }).on('click', e => {
    e.stopPropagation();
    createSidebar();
    $sidebar?.toggleClass('open');
    }).prependTo($wrapper);
    }

    // ====================== КОНТЕКСТНОЕ МЕНЮ ======================
    $(document).on('contextmenu', 'img[title="[IMG]"], .chat2-message img', function (e) {
    const $img = $(this);

    setTimeout(() => {
    const $menu = $(`.message-actions ul:visible`).last();
    if (!$menu.length) return;

    let url = $img.closest('a').data('url') || $img.attr('src') || $img.data('url');
    if (!url) return;
    if (url.startsWith('//')) url = 'https:' + url;
    if (myGifs.has(url)) return;

    $menu.find('.lzt-gif-add').remove();

    const $li = $menu.find('li').first().clone().addClass('lzt-gif-add').html(`
    <span class="Svg-Icon">
    ${SVG_ICON} Сохранить GIF
    </span>
    `).on('click', () => {
    myGifs.add(url);
    GM_setValue(STORAGE_KEY, Array.from(myGifs));
    addGifItem(url);
    $menu.find('.lzt-gif-add').remove();
    });

    $menu.append($li);
    }, 850);
    });

    $('.chat2-button-close').on('click', () => {
    $sidebar = null;
    });

    // ====================== НАБЛЮДАТЕЛЬ ======================
    const observer = new MutationObserver(() => {
    if ($(chatTag).length && !$sidebar) createSidebar();
    if ($(`${chatTag} .editor-box-wrapper`).length && !$('#lzt-gif-btn').length) addButton();
    });

    observer.observe(document.body, { childList: true, subtree: true });

    // Инициализация
    setTimeout(() => {
    createSidebar();
    addButton();
    }, 2000);

    })();
     
    1. God_likeGL Layer 1
      :newyeargirl: avatarКорги закрепи сообщение в теме если не сложно
    2. unblock
      avatarGod_likeGL Layer 1 , лучше ему в личку скинуть и он выкатит фикс, не вижу смысла в фиксе в виде закрепленного сообщения
  13. сынище_королевы
    ай лев! ай корга :curator: еще бы не тока в чате но и в принципе глобально это сделать
     
    1. unblock
  14. Alertik
    ахуеть телграм-СКОРО ВСЕ, все будут сидеть на лолзе
     
  15. ПавелДуров
    Годнота братан, ждем когда сделают полноценную обнову :pepelooking:
     
  16. BreakMySoul
    Полезная вещица. Частенько вижу смешные гифки и приходится их сохранять напрямую на пк, а тут прям под рукой будет :+rep: :pepeshapka:
     
  17. routine
    прикольно, но можно было бы сделать не только гиф, а чтоб и картинки сохранять можно
     
    1. 555
      avatarroutine, можно через шаблоны реализовать, а расширением добавить их работоспособность в чате
    2. unblock
      avatarroutine, картинки тоже сохраняет
  18. blunt
    импорт и экспорт гифок добавить бы
     
    1. Корги Topic starter
      avatarblunt, будет реализованно в ближайшем обновлении
  19. modafinil
    корга есть баг с гифками на сторонних хостингах, условно если я со своего облака скину гифку и сохраню ее то при отправке
    Code

    proxy.php?image=https%3A%2F%2Fcdn.rszmeow.pro %2Fa6d1eb0e1f122395.gif&hash=f725a6e21d5a42eaa0850a6e47011db7
    типо так
    [IMG]
     
    1. Корги Topic starter
  20. диспут
    Добавить:
    1. Избранное
    2. Создание своих паков (отдельные в нижнем меню)
    3. Сделать кнопку, которая ведет на тему с паками
     
Loading...