VK Music Discord RPC Bridge v1.3.0 Показывай что слушаешь в ВК через Discord Rich Presence! (Скриншот как выглядит при прослушивании) Приветствую, гость! Хочу представить свой проект - VK Music Discord RPC Bridge. Это удобный инструмент для отображения прослушиваемой музыки из ВКонтакте в вашем Discord-профиле через систему Rich Presence. Больше не нужно вручную обновлять статус - программа делает это автоматически! Ключевые особенности Автоматическое определение трека в VK Красивый современный интерфейс с анимациями Отображение прогресса прослушивания Поддержка статуса "Пауза" Автопереподключение к Discord Уведомления в системном трее Гибкие настройки Автоматические обновления Работа в фоновом режиме Интерфейс • Стеклянные карты с тенями (neumorphism design) • Плавные анимации элементов • Кастомные прогресс-бары • Анимированные кнопки • Система уведомлений • Темная тема с градиентами Технические детали • Python 3.10+ • Библиотеки: PyQt5, pypresence • Модульная архитектура • Асинхронный сервер • Механизм автоматического обновления • Кроссплатформенная работа Скачать и установить1. Установить TamperMonkey для того, чтобы использовать hook -> Скачать После того, как мы установили tampermonkey, находим его в наших расширениях, и кликаем на него, и нажимаем создать скрипт. После чего у нас откроется окно, в котом мы выбираем весь текст который там написан, и заменяем нашим hook-ком 2. Установить hook. // ==UserScript== // @name Vk Music RPC hook // @namespace http://tampermonkey.net/ // @version 2.0.0 // @description This extension is a hook for the vk-discord-rpc project on github // @author TofaDev, Suburbanno // @updateURL https://raw.githubusercontent.com/Suburbanno/vk-music-rpc/main/vk-extension.js // @downloadURL https://raw.githubusercontent.com/Suburbanno/vk-music-rpc/main/vk-extension.js // @match *://vk.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=vk.com // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @require https://cdn.socket.io/4.0.0/socket.io.min.js // ==/UserScript== const getCurrentPlayingMusic = () => { var wrap = document.querySelector(".top_audio_player_title_wrap"); var textMusicDiv = wrap.querySelector("div"); return textMusicDiv.textContent; }; const musicIsPlaying = (musicPlayer) => { return musicPlayer.classList.contains("top_audio_player_playing"); }; let serverUrl = GM_getValue("serverUrl", "ws://localhost:8112"); GM_registerMenuCommand("Set the websocket server address", () => { let url = prompt( "Enter the address for the websocket server in the format: ws://host:port", serverUrl ); if (url) { serverUrl = url; GM_setValue("serverUrl", url); } }); (function () { "use strict"; const musicPlayer = document.getElementById("top_audio_player"); if (!musicPlayer) return; const socket = io.connect(serverUrl); socket.on("connect", () => { console.log("connected to vk-discord-rpc server"); let lastSong = null; let isSongPaused = false; setInterval(() => { if (!musicIsPlaying(musicPlayer)) { if (!isSongPaused) { socket.emit("song_paused", "song is paused"); isSongPaused = true; } lastSong = null; return; } isSongPaused = false; let currentSong = getCurrentPlayingMusic(); if (lastSong === currentSong) return; lastSong = currentSong; let splittedSong = currentSong.split("—"); socket.emit("song_changed", { artist: splittedSong[0], songName: splittedSong[1], source: "VK", }); }, 500); }); })(); JS // ==UserScript== // @name Vk Music RPC hook // @namespace http://tampermonkey.net/ // @version 2.0.0 // @description This extension is a hook for the vk-discord-rpc project on github // @author TofaDev, Suburbanno // @updateURL https://raw.githubusercontent.com/Suburbanno/vk-music-rpc/main/vk-extension.js // @downloadURL https://raw.githubusercontent.com/Suburbanno/vk-music-rpc/main/vk-extension.js // @match *://vk.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=vk.com // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @require https://cdn.socket.io/4.0.0/socket.io.min.js // ==/UserScript== const getCurrentPlayingMusic = () => { var wrap = document.querySelector(".top_audio_player_title_wrap"); var textMusicDiv = wrap.querySelector("div"); return textMusicDiv.textContent; }; const musicIsPlaying = (musicPlayer) => { return musicPlayer.classList.contains("top_audio_player_playing"); }; let serverUrl = GM_getValue("serverUrl", "ws://localhost:8112"); GM_registerMenuCommand("Set the websocket server address", () => { let url = prompt( "Enter the address for the websocket server in the format: ws://host:port", serverUrl ); if (url) { serverUrl = url; GM_setValue("serverUrl", url); } }); (function () { "use strict"; const musicPlayer = document.getElementById("top_audio_player"); if (!musicPlayer) return; const socket = io.connect(serverUrl); socket.on("connect", () => { console.log("connected to vk-discord-rpc server"); let lastSong = null; let isSongPaused = false; setInterval(() => { if (!musicIsPlaying(musicPlayer)) { if (!isSongPaused) { socket.emit("song_paused", "song is paused"); isSongPaused = true; } lastSong = null; return; } isSongPaused = false; let currentSong = getCurrentPlayingMusic(); if (lastSong === currentSong) return; lastSong = currentSong; let splittedSong = currentSong.split("—"); socket.emit("song_changed", { artist: splittedSong[0], songName: splittedSong[1], source: "VK", }); }, 500); }); })(); 3. Скачайте последнюю версию в Releases 4. Запустите EXE-файл (Windows) 5. Нажмите "Запустить сервер" 6. Начните слушать музыку в VK! Последнее обновление (v1.3.0): • Полная переработка UI/UX • Добавлена система автообновлений • Оптимизировано потребление ресурсов • Исправлены баги с определением треков • Добавлены новые анимации интерфейса Буду рад фидбеку и предложениям по улучшению!