Twitch Report Underage

Adds a Button which lets you Report Underage (12 Years) Content on Twitch with a single click.

// ==UserScript==
// @name         Twitch Report Underage
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Adds a Button which lets you Report Underage (12 Years) Content on Twitch with a single click.
// @author       ChoosenEye
// @match        https://www.twitch.tv/*
// @grant        GM.xmlHttpRequest
// @grant        GM.addStyle
// @license      GNU General Public License v3.0
// ==/UserScript==

(function() {
    'use strict';

    function getCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }


    GM.addStyle(".reportbutton { line-height: 20px; text-align: center; border-radius: 0.4rem; color: white; width: max-content; background-color: rgb(255, 20, 20); padding: 5px 10px; margin: 0 8px; display:inline-flex; }")
    GM.addStyle(".reportbutton:hover { background-color: rgb(200, 20, 20); }");

    //wait for pageload
    window.addEventListener('load', function() {
        setTimeout(() => {
            AddButton("Underage (12y)");
        }, 3500);
    }, false);

    const AddButton = (name) => {
    //define Button for Reporting
        let image = 'https://cdn.frankerfacez.com/emoticon/427168/1';
        let button = document.createElement('div');
        button.innerHTML = `<button id="${name}" class="reportbutton"><img style="margin-right: 5px;width:auto;height:20px;" src="${image}" /> ${name} </button>`;
        document.querySelector(".metadata-layout__support > div:nth-child(2)").appendChild(button);
        document.getElementById(name).addEventListener("click", clickButton);
    }

    const clickButton = () => {
            sendGQLReq();
        }


    const getChannelId = () => {
        let twitchgqlurl = '//gql.twitch.tv/gql'
        return new Promise((resolve) => {
            GM.xmlHttpRequest({
                method: "POST",
                headers: {
                    'Authorization': `OAuth ${getCookie('auth-token')}`,
                    'Client-Id': 'kimne78kx3ncx6brgo4mv6wki5h1ko'
                },
                url: `https:${twitchgqlurl}`,
                data:  `{"query": "{user(login: \\"${window.location.pathname.substring(1)}\\", lookupType: ALL) {id}}"}`,
                dataType: 'json',
                contentType: 'application/json',
                overrideMimeType: 'application/json',
                onload: (req) => {
                    console.log(JSON.parse(req.responseText).data.user.id);
                    resolve(JSON.parse(req.responseText).data.user.id);
                }
            });
        });
    }


   const sendGQLReq = async () => {
       let ChannelID = await getChannelId();
       let twitchgqlurl = '//gql.twitch.tv/gql';

       GM.xmlHttpRequest({
           method: "POST",
           headers: {
               'Authorization': `OAuth ${getCookie('auth-token')}`,
               'Client-Id': 'kimne78kx3ncx6brgo4mv6wki5h1ko'
           },
           url: `https:${twitchgqlurl}`,
           data:  `{"operationName":"ReportUserModal_ReportUser","variables":{"input":{"description":"report context: USER_REPORT\\n\\nvideo > video more options > underage\\n\\ndescription: child under 12","reason":"underaged","content":"LIVESTREAM_REPORT","contentID":"","extra":"","targetID":"${ChannelID}","wizardPath":["video","video more options","underage"]}},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"dd2b8f6a76ee54aff685c91537fd75814ffdc732a74d3ae4b8f2474deabf26fc"}}}`,
           dataType: 'json',
           contentType: 'application/json',
           overrideMimeType: 'application/json',
           onload: (req) => {
               let resp = JSON.parse(req.responseText);
               if (resp.data.reportContent.contentID === ""){
                   alert("reported successfully.");
               } else {
                   alert("error occured: " . resp.data.reportContent.contentID);
               }
           }
       });
   }


})();