Copy information of apps from F-Droid to post on Mobilism

Add a button to F-Droid app pages to copy information of apps from F-Droid and format it to post on Mobilism

// ==UserScript==
// @name         Copy information of apps from F-Droid to post on Mobilism
// @namespace    https://github.com/AbdurazaaqMohammed/userscripts
// @version      1.0.3.1
// @description  Add a button to F-Droid app pages to copy information of apps from F-Droid and format it to post on Mobilism
// @author       Abdurazaaq Mohammed
// @match        https://f-droid.org/*/packages*
// @grant        GM_setClipboard
// @license      The Unlicense
// @homepage     https://github.com/AbdurazaaqMohammed/userscripts
// @supportURL   https://github.com/AbdurazaaqMohammed/userscripts/issues
// ==/UserScript==

(function() {
  'use strict';

  function addButton() {
    const container = document.createElement('div');
    container.style.position = 'fixed';
    container.style.top = '10px';
    container.style.left = '10px';

    const button = document.createElement('button');
    button.innerText = 'Format and Copy';
    button.addEventListener('click', getInfo);

    container.appendChild(button);
    document.body.appendChild(container);
  }

  function getInfo() {
    const title = document.querySelector('h3').textContent.trim();
    const overview = document.querySelector('body > div > div > div.article-area > article > header > div > div').textContent.trim();
    const requiredVersion = document.querySelector("#latest > p.package-version-requirement").textContent.trim().replace('This version requires ', '');
    const version = document.querySelector("#latest > div.package-version-header > b").textContent.trim().replace('Version ', 'v');
    const postDesc = document.querySelector("body > div > div > div.article-area > article > div.package-description").innerText.replace(/\p{Emoji}/gu, '').replace('\n\n', '\n');
    const changelog = document.querySelector("body > div > div > div.article-area > article > div.package-whats-new > div:nth-child(2)") ? document.querySelector("body > div > div > div.article-area > article > div.package-whats-new > div:nth-child(2)").textContent.trim().replace(/\p{Emoji}/gu, '') : 'No changelog';
    const postTitle = `[b]${title} ${version}[/b]`;
    const postRequirements = `[u]Requirements:[/u] ${requiredVersion}`;
    const postOverview = `[u]Overview:[/u] ${overview}`;
    const img = `YOU STILL HAVE TO PUT THE IMAGE\n[break]`;
    const modInfo = ''; //put mod info if you want
    const postChangelog = `[u]What's New:[/u]\n${changelog}`;
    const adsField = '[b]This app has no advertisements[/b]';
    const playstoreLink = `[u]More Info:[/u]\n[code]${window.location.href}[/code]`;
    const latestDL = document.querySelector("#latest > div.package-version-header > b").textContent.trim() == document.querySelector("body > div.site-wrapper > div > div.article-area > article > div.package-versions > ul > li:nth-child(2) > div.package-version-header > b").textContent.trim() ? document.querySelector('#latest > p.package-version-nativecode > code').textContent.trim() + '\n\nMirror:\n' + document.querySelector('#latest > p.package-version-download > b > a') + '\n\n' + document.querySelector("body > div.site-wrapper > div > div.article-area > article > div.package-versions > ul > li:nth-child(2) > p.package-version-nativecode > code").textContent.trim() +'\n\n' + 'Mirror:\n' + document.querySelector("body > div.site-wrapper > div > div.article-area > article > div.package-versions > ul > li:nth-child(2) > p.package-version-download > b > a") : '\nMirror:\n' + document.querySelector('#latest > p.package-version-download > b > a');
    const dlLinks = `[u]Download Instructions:[/u]\n${latestDL}\n`;
    const msg = 'Trouble downloading? Read [url=https://forum.mobilism.org/viewtopic.php?f=19&t=649944][b]This[/b][/url].';
    const fullInfo = `${postTitle}\n${postRequirements}\n${postOverview}\n\n${img}\n${postDesc}\n${modInfo}\n${postChangelog}\n\n${adsField}\n\n${playstoreLink}\n${dlLinks}\n${msg}`;

    if (fullInfo) {
      GM_setClipboard(fullInfo);
      alert('Copied info to clipboard.');
    } else {
      alert('Error');
    }
  }

  addButton();
})();