|
Post by cetav13115 on Oct 8, 2023 3:32:10 GMT -8
I noticed some people sharing stuff from Discord for others here to download. In recent times Discord wants to make file links expire because malware, server load or something. Someone may need to archive a bunch of them since they may not be accessible in the future.
|
|
ephemeralViolette
Sophomore Member
Posts: 183
OS: Windows 10 (20H2), Windows 10 (22H2)
Theme: Windows XP Luna, Windows 7 Aero
CPU: AMD Ryzen 9 5900X
RAM: 64 GB
GPU: Radeon RX 580
|
Post by ephemeralViolette on Oct 8, 2023 22:46:12 GMT -8
I went ahead and scraped every Discord CDN link on this forum, then mass downloaded them and uploaded it all to Internet Archive. You can find the archive here: archive.org/details/winclassic-discord-cdn-archivePosts can be easily associated with their related post via the first number in each file name. However, I'm not entirely confident that the links could be easily transferred over on the forums for various reasons.
|
|
Brawllux
Regular Member
Yeeting metro settings out of the window
Posts: 284
OS: Windows 11
CPU: Intel Core I5-13500H
RAM: 16GB DDR5 5200MHz
GPU: Nvidia RTX 4060 Mobile 8GB
|
Post by Brawllux on Oct 8, 2023 23:37:13 GMT -8
I went ahead and scraped every Discord CDN link on this forum, then mass downloaded them and uploaded it all to Internet Archive. You can find the archive here: archive.org/details/winclassic-discord-cdn-archivePosts can be easily associated with their related post via the first number in each file name. However, I'm not entirely confident that the links could be easily transferred over on the forums for various reasons. Attachments:
|
|
|
Post by OrthodoxWin32 on Oct 9, 2023 0:26:57 GMT -8
This happened to me before because of a false positive on VirusTotal.
|
|
ephemeralViolette
Sophomore Member
Posts: 183
OS: Windows 10 (20H2), Windows 10 (22H2)
Theme: Windows XP Luna, Windows 7 Aero
CPU: AMD Ryzen 9 5900X
RAM: 64 GB
GPU: Radeon RX 580
|
Post by ephemeralViolette on Oct 9, 2023 14:16:00 GMT -8
|
|
|
Post by cetav13115 on Oct 10, 2023 6:43:17 GMT -8
I guess at this point the only thing to try and do is to archive the links individually on archive.org Attachments:
|
|
ephemeralViolette
Sophomore Member
Posts: 183
OS: Windows 10 (20H2), Windows 10 (22H2)
Theme: Windows XP Luna, Windows 7 Aero
CPU: AMD Ryzen 9 5900X
RAM: 64 GB
GPU: Radeon RX 580
|
Post by ephemeralViolette on Oct 10, 2023 14:11:20 GMT -8
New mirror: drive.google.com/file/d/1v3qa_MPPUg3_MzQxmb27fOPpbU1_pwtc/view?usp=sharingI password encrypted it with "fuck virustotal" in order to bypass automated malware scanners, because FUCK VirusTotal and their false positives. Also, archiving each link individually onto Wayback Machine wouldn't really be possible. At least, not with only one person doing the work. You'd get rate limited pretty fast, which is why I opted for crawling the links directly and just uploading a local archive.
|
|
herit://that1cutie
Sophomore Member
sad girl times
Posts: 165
OS: Windows 10
Theme: Shitbox Edition
|
Post by herit://that1cutie on Oct 13, 2023 5:48:53 GMT -8
I plan to do this *very* soon for all the resources posted to ClassicServ as well.
|
|
Jevil7452
Sophomore Member
Win10toVista = Vista's "poor performance and stability" without feeling you're actually using Vista
Posts: 195
OS: Windows 10 1703 (15063)
Theme: WinTango Patcher (Shiki-Colors Noble)
CPU: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
RAM: 32GB
GPU: Intel Iris Xe Graphics G7 80EU
|
Post by Jevil7452 on Mar 4, 2024 13:21:50 GMT -8
For the posts that haven't moved over to another image host, you are able to access their image/resources by opening developer tools, searching for cdn.discordapp.com, copying the link, and pasting it into a Discord client and clicking it from there. It's needed to do developer tools stuff only for images, bare links you can just copy and paste into discord directly.
|
|
ephemeralViolette
Sophomore Member
Posts: 183
OS: Windows 10 (20H2), Windows 10 (22H2)
Theme: Windows XP Luna, Windows 7 Aero
CPU: AMD Ryzen 9 5900X
RAM: 64 GB
GPU: Radeon RX 580
|
Post by ephemeralViolette on Mar 4, 2024 16:40:44 GMT -8
For the posts that haven't moved over to another image host, you are able to access their image/resources by opening developer tools, searching for cdn.discordapp.com, copying the link, and pasting it into a Discord client and clicking it from there. It's needed to do developer tools stuff only for images, bare links you can just copy and paste into discord directly. Good thought. Since links on the forum still aren't mirrored over (and I don't think can reasonably be), it would be good for this to be listed as some form of instructions for accessing old links. Maybe a disclaimer under posts with Discord CDN links would be good.
|
|
Cynosphere
Freshman Member
Posts: 33
OS: Windows 10 Home 22H2
Theme: Classic (Scheme: Amora Focus)
CPU: AMD Ryzen 7 3700X
RAM: 32 GB
GPU: AMD Radeon RX 7900 XT
|
Post by Cynosphere on Mar 5, 2024 7:11:46 GMT -8
Bot accounts can refresh attachment URLs, so I wrote a userscript to automatically replace links and images {Spoiler} // ==UserScript== // @name Automatic External Discord Attachment Refresher // @namespace c7.pm // @match *://*/* // @version 1.0.0 // @author Cynosphere // @description 2/23/2024, 1:30:22 PM // @run-at document-body // @grant GM.xmlHttpRequest // @connect discord.com // ==/UserScript==
(()=>{ const headers = { "User-Agent": "DiscordBot (https://c7.pm, 1.0.0) AttachmentRefresherUserscript", "Authorization": "Bot TOKENHERE", "Content-Type": "application/json", };
const selectors = [ `a[href*="cdn.discordapp.com/attachments/"]:not([href*="?ex="])`, `img[src*="cdn.discordapp.com/attachments/"]:not([src*="?ex="])`, `a[href*="media.discordapp.net/attachments/"]:not([href*="?ex="])`, `img[src*="media.discordapp.net/attachments/"]:not([src*="?ex="])`, ];
let timer;
function debounce(cb, delay = 500) { if (timer) clearTimeout(timer); timer = setTimeout(cb, delay) }
const pending = new Map();
function xhr(props) { return new Promise((resolve, reject) => { GM.xmlHttpRequest(Object.assign({}, props, { onload(res) { resolve(res); }, onabort() { reject(new DOMException("Aborted", "AbortError")); }, ontimeout() { reject(new TypeError("Network request failed, timeout")); }, onerror(err) { reject(new TypeError("Failed to fetch: " + err.finalUrl)); }, })); }) }
async function refresh() { const urls = []; for (const url of pending.keys()) { urls.push(url); }
const data = await xhr({ url: "https://discord.com/api/v10/attachments/refresh-urls", method: "POST", headers, data: JSON.stringify({attachment_urls: urls}), responseType: "json" }).then(res=>JSON.parse(res.responseText));
for (const {original, refreshed} of data.refreshed_urls) { const elem = pending.get(original); if (elem.tagName === "A") { elem.href = refreshed; } else if (elem.tagName === "IMG") { elem.src = refreshed; }
pending.delete(original); }
console.log(`Refreshed ${urls.length} attachments.`); }
function mutate(elem) { let url = elem.href ?? elem.src; if (!url) return;
if (!pending.has(url)) { pending.set(url, elem); debounce(refresh); } }
if (!location.hostname.endsWith("discord.com")) { new MutationObserver((records) => { const changedElems = new Set();
for (const record of records) { changedElems.add(record.target);
for (const elem of record.removedNodes) if (elem instanceof HTMLElement || elem instanceof SVGElement) changedElems.add(elem); }
for (const elem of changedElems) { if (!elem) { changedElems.remove(elem); continue; } for (const selector of selectors) { if (elem?.matches?.(selector)) mutate(elem); elem ?.querySelectorAll?.(selector) ?.forEach?.((e) => (e instanceof HTMLElement || e instanceof SVGElement) && mutate(e)); } } }).observe(document.body, { childList: true, characterData: true, subtree: true }); } })();
|
|