|
// ==UserScript== |
|
// @name Add Download Links to emojis in the chat |
|
// @namespace https://gist.github.com/BoQsc/ |
|
// @version 0.3 |
|
// @description After joining and opening a channel in a Discord Guild, the script will scan for changes in the DOM every 4 seconds and add a download link near an emoji. |
|
// @author Public Domain |
|
// @website https://gist.github.com/BoQsc/1c6f7e588ae2f9ccb4324ccf74778e7c |
|
// @downloadURL https://gist.github.com/BoQsc/1c6f7e588ae2f9ccb4324ccf74778e7c/raw/Discord_add_download_links_to_emoji.user.js |
|
// @updateURL https://gist.github.com/BoQsc/1c6f7e588ae2f9ccb4324ccf74778e7c/raw/Discord_add_download_links_to_emoji.user.js |
|
// @match https://discord.com/channels/* |
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=discord.com |
|
// @grant GM_download |
|
// ==/UserScript== |
|
|
|
let call_function_at_4seconds_interval = window.setInterval(function(){ |
|
add_download_links_near_emoji(); |
|
}, 4000); |
|
|
|
function add_download_links_near_emoji(){ |
|
let scanned_emojis = document.querySelectorAll(".emoji"); |
|
|
|
// Loop throught all the found .emoji elements |
|
for (let new_link_tag, emoji_url, emoji_url_changed, i = 0; i < scanned_emojis.length; i++) { |
|
|
|
// Check if emoji already have the download link |
|
if(scanned_emojis[i].getAttribute('AlreadyCheckedEmoji') === null){ |
|
|
|
// Mark an emoji HTML element with AlreadyCheckedEmoji attribute |
|
scanned_emojis[i].setAttribute("AlreadyCheckedEmoji",""); |
|
|
|
// Creates new HTML a element |
|
new_link_tag = document.createElement('a'); |
|
new_link_tag.innerHTML = 'Download <b>' + scanned_emojis[i].ariaLabel + '</b>'; |
|
new_link_tag.setAttribute('title', 'Downloads Emoji'); |
|
|
|
// Enforce high quality emojis. |
|
// Replaces URL size parameter |
|
let emoji_url = new URL(scanned_emojis[i].currentSrc); |
|
let emoji_params = new URLSearchParams(emoji_url.search); |
|
emoji_params.set('size', 512); |
|
emoji_url_changed = emoji_url.origin + emoji_url.pathname + "?" + emoji_params.toString(); // "size=512&quality=lossless" |
|
|
|
// On clicking Download Link: Open emoji url in a new browser window. |
|
// Note: Left click is being blocked and handled to download the emoji instead. |
|
// Note: This is mostly for the Middle-Click. |
|
new_link_tag.setAttribute('target', '_blank'); |
|
new_link_tag.setAttribute('href', emoji_url_changed); |
|
|
|
|
|
// Append Download link near emoji. |
|
console.log(scanned_emojis[i].parentElement.appendChild(new_link_tag)); |
|
console.log(emoji_url_changed); |
|
|
|
// Click event listener for Download Button near emoji |
|
new_link_tag.addEventListener("click", function(event){ |
|
|
|
// Prevents Left-Click, but still allows Middle-Click to open url in a new browser window |
|
event.preventDefault(); |
|
|
|
// Left-Click calls Tampermonkey extension function to download the emoji. |
|
download_emoji(emoji_url_changed, scanned_emojis[i].ariaLabel); |
|
|
|
}, false ); |
|
|
|
} |
|
} |
|
} |
|
|
|
// Tampermonkey functionality to download files from url links. |
|
// url example: https://cdn.discordapp.com/emojis/1005571691361095720.webp?size=96&quality=lossless |
|
// name example: :2702kuromivibing: |
|
// saveAs: simply means that "Save As" window won't be shown. |
|
function download_emoji(download_url, the_emoji_name){ |
|
GM_download({ |
|
url: download_url, |
|
name: the_emoji_name.replaceAll(":",""), |
|
saveAs: false |
|
}) |
|
} |