Greasy Fork is available in English.

Pter game Uploady

Game Uploady for Pterclub

// ==UserScript==
// @name         Pter game Uploady
// @namespace    https://pterclub.com/forums.php?action=viewtopic&topicid=3391
// @version      1.2.5
// @description  Game Uploady for Pterclub
// @author       BbLaCk
// @credits      NeutronNoir, ZeDoCaixao
// @match        https://pterclub.com/uploadgameinfo.php*
// @match        https://pterclub.com/editgameinfo.php*
// @include      https://s3.pterclub.com*
// @require      https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js
// @require      https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
// @icon         https://pterclub.com/favicon.ico
// @grant        GM.xmlHttpRequest
// @grant        GM_xmlhttpRequest
// @grant        GM.setValue
// @grant        GM.getValue
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM.cookie
// @grant        GM_cookie
// ==/UserScript==
var pterimagecookie = GM_getValue("pterimagecookie", null)
var pterimagekey = GM_getValue("pterimagekey", null)
    $("input[name='name']").parent().parent().after(
        "<tr><td>Game URL</td><td><input style='width: 450px;' id='gameid' /></td></tr>"
    );
$('#gameid').after("<p id='status_helper'>输入相关链接并点击相应平台按钮,开始获取信息</p>")
const helper = document.getElementById('status_helper');

function html2bb(str) {
    if (!str) return "";
    str = str.replace(/< *br *\/*>/g, "\n\n"); //*/
    str = str.replace(/< *b *>/g, "[b]");
    str = str.replace(/< *\/ *b *>/g, "[/b]");
    str = str.replace(/< *u *>/g, "[u]");
    str = str.replace(/< *\/ *u *>/g, "[/u]");
    str = str.replace(/< *i *>/g, "[i]");
    str = str.replace(/< *\/ *i *>/g, "[/i]");
    str = str.replace(/< *strong *>/g, "[b]");
    str = str.replace(/< *\/ *strong *>/g, "[/b]");
    str = str.replace(/< *em *>/g, "[i]");
    str = str.replace(/< *\/ *em *>/g, "[/i]");
    str = str.replace(/< *li *>/g, "[*]");
    str = str.replace(/< *\/ *li *>/g, "");
    str = str.replace(/< *ul *class=\\*\"bb_ul\\*\" *>/g, "");
    str = str.replace(/< *\/ *ul *>/g, "");
    str = str.replace(/< *h2 *class=\"bb_tag\" *>/g, "\n[center][u][b]");
    str = str.replace(/< *h[1234] *>/g, "\n[center][u][b]");
    str = str.replace(/< *\/ *h[1234] *>/g, "[/b][/u][/center]\n");
    str = str.replace(/\&quot;/g, "\"");
    str = str.replace(/\&amp;/g, "&");
    str = str.replace(/< *img *src="([^"]*)".*>/g, "\n");
    str = str.replace(/< *img.*src="([^"]*)".*>/g, "\n");
    str = str.replace(/< *a [^>]*>/g, "");
    str = str.replace(/< *\/ *a *>/g, "");
    str = str.replace(/< *p *>/g, "\n\n");
    str = str.replace(/< *\/ *p *>/g, "");
    //Yeah, all these damn stars. Because people put spaces where they shouldn't.
    str = str.replace(/“/g, "\"");
    str = str.replace(/”/g, "\"");
    str = str.replace(/  +/g, " ");
    str = str.replace(/\n +/g, "\n");
    str = str.replace(/\n\n\n+/gm, "\n\n");
    str = str.replace(/\n\n\n+/gm, "\n\n");
    str = str.replace(/\[\/b\]\[\/u\]\[\/align\]\n\n/g, "[/b][/u][/align]\n");
    str = str.replace(/\n\n\[\*\]/g, "\n[*]");
    str = str.replace(/< *video.*>\n.*?< *\/ *video *>/g,'');
    // str = str.replace(/< *\/ *source.*>/g,'');
    str = str.replace(/<hr>/g,'\n\n');
    return str;
}
function get_pterimage(){
    const token = $('a[href^="https://s3.pterclub.com/logout/?auth_token="]').attr("href").replace("https://s3.pterclub.com/logout/?auth_token=",'')
    GM_setValue("pterimagekey", token);
    let cookies = GM_getValue("pterimagecookie", null);
    console.log(token)
    if (!cookies){
        GM_cookie.list({ url: "https://s3.pterclub.com" }, (cookie, error) => {
            if (!error) GM.setValue("pterimagecookie", cookie[0]['name']+"="+cookie[0]['value']+"; "+cookie[1]['name']+"="+cookie[1]['value']);
            else GM.setValue("pterimagecookie", "error");
        });
    }
    if (cookies === "error") cookies = prompt('自动获取cookies失败,请手动输入cookies')
    console.log(cookies)
    GM_setValue("pterimagecookie",cookies);
    if (confirm("已尝试获取cookies,是否刷新?")=== true) location.reload()
}

async function rehostinvienova(imageurl){
    // helper.innerText= "正在转存图片"
    let result = ''
    function blobToBase64(blob) {
      return new Promise((resolve, _) => {
        const reader = new FileReader();
        reader.onloadend = () => resolve(reader.result);
        reader.readAsDataURL(blob);
      });
    }
    async function up2imgbb(response){
        let form = new FormData()
        let base64 = await blobToBase64(response.response)
        base64 = encodeURIComponent(base64.replace(/data:image\/.+?;base64,/,""))
        form.append('image',base64)

        await GM.xmlHttpRequest({
            method: "POST",
            url: 'https://api.imgbb.com/1/upload?key=26c350d051aa9be55b7d7cea1f082178',
            headers: {'Content-Type': 'application/x-www-form-urlencoded'},
            data: "image=" + base64,
            anonymous: true,
            fetch: true,
            responseType: 'json',
            onload: function (response) {
                if (response.response.success) {
                    result = response.response.data.image.url
                }
                else console.log(response.response.error)

            },
            onerror: function (error) {
                console.log(error)
            }
        })

    }
    async function downloadfrominde(inde_url){
       return await GM.xmlHttpRequest({
            method: "GET",
            url: inde_url,
            headers: {"Referer":'https://indienova.com/'},
            responseType: 'blob'
        })
    }
    let imgblob = await downloadfrominde(imageurl)
    await up2imgbb(imgblob)
    return result
}
async function upload_pterimage(image_link){
    let url = "https://s3.pterclub.com/json/"+"?action=upload&source="+image_link+"&auth_token="+pterimagekey
    let headers = {
    'authority': 's3.pterclub.com',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'cache-control': 'no-cache',
    'cookie': pterimagecookie,
    'pragma': 'no-cache',
    'referer': 'https://s3.pterclub.com/',
    'sec-ch-ua': '"Chromium";v="110", "Not A(Brand";v="24", "Microsoft Edge";v="110"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.49',
}
    let result = ''
     await GM.xmlHttpRequest({
        method: "GET",
        url: url,
        responseType: 'json',
        anonymous: true,
        headers: headers,
        onload: function (response) {
            if (response.response.status_code === 200) result = response.response.image.image.url
            else {
                result = image_link
                if (response.response.error.message.includes("(auth_token)")){
                    console.log("Cookies 过期,请立刻更新cookies")
                    GM.setValue("pterimagecookie", '');
                }
            }
            console.log(response.response)
        },
        onerror: function (error) {
            result =  image_link;
        }
    })
    return result
}

function markdown2bb(str) {
    if (!str) return "";
    str = str.replace(/!\[.*?\.(?:jpg|png)\)\n\n/g, '');//删除markdown格式的图片
    str = str.replace(/#(.*?)\n\n/g, '[b]$1:[/b]');//修改markdown标题为bbcode
    return str;
}

function fix_emptylines(str) {
    var lst = str.split("\n");
    var result = "";
    var empty = 1;
    lst.forEach(function(s) {
        if (s) {
            empty = 0;
            result = result + s + "\n";
        } else if (empty < 1) {
            empty = empty + 1;
            result = result + "\n";
        }
    });
    return result;
}

function pretty_sr(str) {
    if (!str) return "";
    str = str.replace(/™/g, "");
    str = str.replace(/®/g, "");
    str = str.replace(/:\[\/b\] /g, "[/b]: ");
    str = str.replace(/:\n/g, "\n");
    str = str.replace(/:\[\/b\]\n/g, "[/b]\n");
    str = str.replace(/\n\n\[b\]/g, "\n[b]");
    return str;
}

async function steam_form(response) {
    //调用steamapi获取相关信息
    //We store the data in gameInfo, since it's much easier to access this way

    //var steamid = /app\/(\d+)\//g.exec($("#gameid").val()).pop();
    helper.innerText = "正在获取!"
    var gameInfo = response.response[steamid].data;
    var about = gameInfo.about_the_game;
    var date = gameInfo.release_date.date.split(", ").pop();
    var year = date.split("年").shift().trim();
    var store = 'https://store.steampowered.com/app/' + steamid;
    var genres = [];
    if (gameInfo.hasOwnProperty('genres')) {
          gameInfo.genres.forEach(function (genre) {
              var tag = genre.description.toLowerCase().replace(/ /g, ".");
              genres.push(tag);
          });
        }
    genres = genres.join("," );
    if (about === '') { about = gameInfo.detailed_description; }
    about = "[center][b][u]关于游戏[/u][/b][/center]\n" +`[b]发行日期[/b]:${date}\n\n[b]商店链接[/b]:${store}\n\n[b]游戏标签[/b]:${genres}\n\n` + html2bb(about).trim();
    var screens_bb = '';
    let image_count = 1
    let total_image = gameInfo.screenshots.length
    for (screen of gameInfo.screenshots){
        helper.innerText = "正在转存第" + image_count + "张图片,共" + total_image + "张"
        image_count ++
        screens_bb += "[img]" + await upload_pterimage(screen.path_full.split("?")[0]) + "[/img]\n"
    }
    helper.innerText = "转存完毕!"
    console.log(screens_bb)

    screens_bb = "[center][b][u]游戏截图[/u][/b][/center]\n" + "[center]" + screens_bb + "[/center]";
    try {
        var trailer = gameInfo.movies[0].webm.max.split("?")[0].replace("http","https");
        var tr = "\n\n[center][b][u]预告欣赏[/u][/b][/center]\n" + `[center][video]${trailer}[/video][/center]`;
    }catch (e) {
        tr = ''
    }
    var platform = "Windows";
    //var cover_field = "input[name='image']";
    var desc_field = "textarea[name='body']";


    $("input[name ='name']").val(pretty_sr(gameInfo.name));  //Get the name of the game
    //$("#year").val(year);
    /*
    var genres = [];
    gameInfo.genres.forEach(function (genre) {
        var tag = genre.description.toLowerCase().replace(/ /g, ".");
        genres.push(tag);
    });
    $("#tags").val(genres.join(", "));*/
    //cover_field = "#image";
    desc_field = "#descr";
    platform = $("#console").val();

    var recfield = gameInfo.pc_requirements;
    switch (platform) {
        case "16":
            recfield = gameInfo.pc_requirements;
            break;
        case "46":
            recfield = gameInfo.linux_requirements;
            break;
        case "37":
            recfield = gameInfo.mac_requirements;
            break;
    }
    if (typeof(recfield.recommended) === "undefined"){
        recfield.recommended = '\n无推荐配置要求';
    }
    if (typeof(recfield.minimum) === "undefined"){
        recfield.minimum = '\n无配置要求';
        recfield.recommended = '';
    }

    var sr = "\n\n[center][b][u]配置要求[/u][/b][/center]\n\n" +
             pretty_sr(html2bb("[quote]\n" + recfield.minimum + "\n" + recfield.recommended + "[/quote]\n"));
    var cover = "[center][img]" +  await upload_pterimage(gameInfo.header_image.split("?")[0]) + "[/img][/center]";       //Get the image URL
    //由于异步原因暂时不获取big_conver了
    /*var big_cover = "[center][img]" + "https://steamcdn-a.akamaihd.net/steam/apps/" + steamid + "/library_600x900_2x.jpg" + "[/img][/center]";
    GM.xmlHttpRequest({
        method: "GET",                  //We call the Steam API to get info on the game
        url: big_cover,
        responseType: "json",
        onload: function(response) {
            if(response.status === 200){
                cover = big_cover;
            }
        }
    });*/
    $(desc_field).val(cover);
    $(desc_field).val($(desc_field).val() + about + sr + tr + screens_bb);
    $(desc_field).val(fix_emptylines($(desc_field).val()));
    $("input[name ='year']").val(year)
    /*if (gameInfo.metacritic) {
        $("#meta").val(gameInfo.metacritic.score);
        $("#metauri").val(gameInfo.metacritic.url.split("?")[0] + "/critic-reviews");
    }*/
}

async function epic_form(response) {
    //调用epicapi获取相关信息
    //We store the data in gameInfo, since it's much easier to access this way
    helper.innerText = "正在获取!"
    var gameInfo = response.response["pages"];
    for (let i=0; i<gameInfo.length;i++){
        if(gameInfo[i]['_title'] === "home"||gameInfo[i]['_title'] === "主页"||gameInfo[i]['_title'] === "Home"){
            gameInfo = gameInfo[i];
            break;
        }
    }
    var about = gameInfo.data.about.description;
    var date = gameInfo.data.meta['releaseDate'];
    var year = date.split("-").shift().trim();
    if (about === "") {about = gameInfo.data.about.shortDescription; }
    about = "[center][b][u]关于游戏[/u][/b][/center]\n" + `[b]发行日期[/b]:${date}\n\n[b]商店链接[/b]:${$("#gameid").val()}\n\n` + markdown2bb(about).trim();
    var screen_bb = '';
    try{
        for (screen of gameInfo.data.gallery.galleryImages ) {
            screen_bb += "[img]" + await upload_pterimage(screen['src']) + "[/img]\n"
        }
    //     gameInfo.data.gallery.galleryImages.forEach(function (screen) {
    //         screens += "[img]" + screen["src"] + "[/img]\n"
    // })
    }catch (e) {
        for (screen of gameInfo._images_){
            screen_bb += "[img]" + await upload_pterimage(screen) + "[/img]\n"
        }
        // gameInfo._images_.forEach(function (screen) {
        //     screens += "[img]" + screen + "[/img]\n"
        // })
    }
    screen_bb = "[center][b][u]游戏截图[/u][/b][/center]\n" + "[center]" + screen_bb + "[/center]" ;
    var desc_field = "textarea[name='body']";

   $("input[name ='name']").val(gameInfo.productName);  //Get the name of the game
   // $("input[name='small_descr']").val(gameInfo.data.about.title); //暂时不获取中文名了
    desc_field = "#descr";
    var platform = $("#console").val();
    switch (platform) {
        case "16":
            platform = "Windows";
            break;
        case "46":
            platform = "Linux";
            break;
        case "37":
            platform = "Mac";
            break;
    }
    var recfield = gameInfo.data.requirements.systems[0].details;
    gameInfo.data.requirements.systems.forEach(function (system) {
        if (system['systemType'] === platform){recfield=system.details}
    });
    var minimum = '[b]最低配置[/b]\n';
    var recommended = '[b]推荐配置[/b]\n';
    recfield.forEach(function (sysrec, index) {
        minimum += "[b]" + sysrec['title'] + "[/b]" + ': ' + sysrec['minimum'] + '\n';
        recommended += "[b]" + sysrec['title'] + "[/b]" + ': ' + sysrec['recommended'] + '\n'
    });
    var sr = "\n\n[center][b][u]配置要求[/u][/b][/center]\n\n" +
        pretty_sr(html2bb("[quote]\n" + minimum + "\n" + recommended + "[/quote]\n"));
    var age_rate = "[center][b][u]游戏评级[/u][/b][/center]\n";
    try {
        let pics = '';
        gameInfo.data.requirements.legalTags.forEach(function (pic) {
            pics += "[img]" + pic["src"] +"[/img]\n";
        });
        age_rate += `[center]${pics}[/center]`
    } catch (e) {
        age_rate=''
    }
    var cover = "[center][img]" + await upload_pterimage(gameInfo.data.about.image.src) + "[/img][/center]";       //Get the image URL
    $(desc_field).val(cover);
    $(desc_field).val($(desc_field).val() + about + sr + age_rate + screen_bb);
    $(desc_field).val(fix_emptylines($(desc_field).val()));
    $("input[name ='year']").val(year)
}

async function gog_form (response) {
    helper.innerText = "正在获取!"
    var gameInfo = response.response["_embedded"];
    function get_chinese(url) {
        return new Promise( (resolve, reject) => {
            GM.xmlHttpRequest({
                method: "GET",
                url: url,
                responseType: "json",
                onload: function (response) {
                    resolve(response.response);
                },
                onerror: function (error) {
                     reject('error');
                }
            });
        });
    }
    let chinese = await get_chinese("https://api.gog.com/products/"+gameInfo['product']['id']+"?expand=description&locale=zh")
    let chinese_desc = chinese["description"]['full']
    let chinese_title = chinese["title"]
    //调用gog获取相关信息
    var english = response.response["description"] //英语介绍
    var about = chinese_desc;
    var date = gameInfo["product"]["globalReleaseDate"];
    var year = date.split("-").shift().trim();
    var store = response.response["_links"]["store"]["href"];
    var genres = [];
    gameInfo.tags.forEach(function (genre) {
        var tag = genre["name"].toLowerCase().replace(/ /g, ".");
        genres.push(tag);
    });
    genres = genres.join("," );
    if (about === '') { about = english; }
    about = "[center][b][u]关于游戏[/u][/b][/center]\n" +`[b]发行日期[/b]:${date}\n\n[b]商店链接[/b]:${store}\n\n[b]游戏标签[/b]:${genres}\n\n` + html2bb(about).trim();
    let image_count = 1
    let total_image = gameInfo.screenshots.length

    var screen_bb = ''
    for (screen of gameInfo.screenshots){
        helper.innerText = "正在转存第" + image_count + "张图片,共" + total_image + "张"
        image_count ++
        let screen_url = screen["_links"]["self"]["href"]
        let format = screen["_links"]["self"]["formatters"].pop()
        screen_url = screen_url.replace("{formatter}",format)
        screen_bb += "[img]" + await upload_pterimage(screen_url) + "[/img]\n"
    }
    helper.innerText = "转存完毕!"
    // gameInfo.screenshots.forEach(function(screen) {
    //     let screen_url = screen["_links"]["self"]["href"]
    //     let format = screen["_links"]["self"]["formatters"].pop()
    //     screen_url = screen_url.replace("{formatter}",format)
    //     screens += "[img]"+ screen_url + "[/img]\n"
    // });
    screen_bb = "[center][b][u]游戏截图[/u][/b][/center]\n" + "[center]" + screen_bb + "[/center]";

    try {
        var trailer = gameInfo.movies[0].webm.max.split("?")[0].replace("http","https");
        var tr = "\n\n[center][b][u]预告欣赏[/u][/b][/center]\n" + `[center][video]${trailer}[/video][/center]`;
    }catch (e) {
        tr = ''
    } // 暂时不弄预告了

    var platform = "Windows";
    //var cover_field = "input[name='image']";
    var desc_field = "textarea[name='body']";

    let title = gameInfo["product"]["title"]
    $("input[name ='name']").val(pretty_sr(title));  //Get the name of the game
    if (title !== chinese_title) {$("input[name ='small_descr']").val(chinese_title);}
    //$("#year").val(year);
    /*
    var genres = [];
    gameInfo.genres.forEach(function (genre) {
        var tag = genre.description.toLowerCase().replace(/ /g, ".");
        genres.push(tag);
    });
    $("#tags").val(genres.join(", "));*/
    //cover_field = "#image";
    desc_field = "#descr";
    platform = $("#console").val();

    var recfield = gameInfo.pc_requirements;
    switch (platform) {
        case "16":
            platform = "windows";
            break;
        case "46":
            platform = "linux";
            break;
        case "37":
            platform = "osx";
            break;
    }
    gameInfo["supportedOperatingSystems"].forEach(function (system) {
        if (system['operatingSystem']["name"] === platform){recfield=system["systemRequirements"]}
    });
    var minimum = '[b]最低配置[/b]\n';
    var recommended = '[b]推荐配置[/b]\n';
    recfield.forEach(function (sysrec) {
        if (sysrec["type"] === "minimum") {
            sysrec["requirements"].forEach(function (req) {
                minimum += "[b]" + req['name'] + "[/b]" + ': ' + req['description'] + '\n';
            })
        } else if (sysrec["type"] === "recommended") {
            sysrec["requirements"].forEach(function (req) {
            recommended += "[b]" + req['name'] + "[/b]" + ': ' + req['description'] + '\n';
            })
        }

    });
    var sr = "\n\n[center][b][u]配置要求[/u][/b][/center]\n\n" +
        pretty_sr("[quote]\n" + minimum + "\n" + recommended + "[/quote]\n");
    var cover = "[center][img]" + await upload_pterimage(response.response["_links"]["boxArtImage"]["href"]) + "[/img][/center]"; //Get the image URL

    $(desc_field).val(cover);
    $(desc_field).val($(desc_field).val() + about + sr + tr + screen_bb);
    $(desc_field).val(fix_emptylines($(desc_field).val()));
    $("input[name ='year']").val(year)
    /*if (gameInfo.metacritic) {
        $("#meta").val(gameInfo.metacritic.score);
        $("#metauri").val(gameInfo.metacritic.url.split("?")[0] + "/critic-reviews");
    }*/
}

async function indienova_form(response) {
    //调用ptgenapi获取indienova的相关信息
    helper.innerText = "正在获取!"
    var gameInfo = response.response;
    let screen_bb = ''
    let cover = "[center][img]" + await rehostinvienova(gameInfo.cover) + "[/img][/center]\n"
    $("input[name ='name']").val(gameInfo.english_title);
    $("input[name ='small_descr']").val(gameInfo.chinese_title);
    $("input[name ='year']").val(gameInfo.release_date.split("-").shift().trim());
    //更改居中显示文字
    var descr = gameInfo.format.replace('【基本信息】', '[center][b][u]基本信息[/u][/b][/center]').replace('【游戏简介】', '[center][b][u]关于游戏[/u][/b][/center]').replace('【游戏评级】', '[center][b][u]游戏评级[/u][/b][/center]');
    //更改居中显示图片
    // descr = descr.replace(/\[img]/g,'[center][img]').replace(/\[\/img]/g,'[/img][/center]');
    let image_count = 1
    let total_image = gameInfo.screenshot.length
    for (screen of gameInfo.screenshot ){
        screen_bb += "[img]" + await rehostinvienova(screen) + "[/img]\n"
        helper.innerText = "正在转存第" + image_count + "张图片,共" + total_image + "张"
        image_count ++
    }
    helper.innerText = "转存完毕!"
    screen_bb = "[center][b][u]游戏截图[/u][/b][/center]\n" + "[center]" + screen_bb + "[/center]" ;
    console.log(screen_bb)
    descr = descr.replace(/【游戏截图】.*/sm, screen_bb).replace(/\[img].+\[\/img]/,cover) // 替换转存的截图和封面
    $("#descr").val(descr)
}


async function choose_form(key) {
    let url;
    if (!key.endsWith('/')){
        key += '/'
    }
    if (key.indexOf("store.steampowered.com/") !== -1) {
        steamid = /app\/(\d+)/g.exec(key).pop();
        url = "https://store.steampowered.com/api/appdetails?l=schinese&appids="+steamid;
        fill_form = steam_form
    }
    else if(key.indexOf("epicgames.com") !== -1) {

        var epicid = /p\/(.+?)\//g.exec(key).pop();
        url ="https://store-content.ak.epicgames.com/api/zh-CN/content/products/"+epicid;
        fill_form = epic_form;
    }
    else if(key.indexOf('indienova') !== -1){
        key = key.substring(0,key.length-1);
        url = "https://gen.cattool.eu.org/?url="+key;
        fill_form = indienova_form
    }
    else if(key.indexOf('gog.com') !== -1){
        function get_gog(url) {
            return new Promise( (resolve, reject) => {
                GM.xmlHttpRequest({
                    method: "GET",
                    url: key,
                    onload: function (response) {
                        resolve(response.responseText);
                    },
                    onerror: function (error) {
                         reject(error);
                    }
                });
            });
        }
        key = key.substring(0,key.length-1);
        let gog = await get_gog(key)
        gog = /(?<=card-product=")\d+(?=")/.exec(gog).pop()
        url = "https://api.gog.com/v2/games/"+gog;
        fill_form = gog_form
    }
    return url;

}

async function triger(gameid) {
        const url = await choose_form(gameid.val());
        GM.xmlHttpRequest({
            method: "GET",                  //We call the Steam API to get info on the game
            url: url,
            responseType: "json",
            onload: fill_form
        });
}

(function() {
    'use strict';
    if (!pterimagekey || !pterimagecookie || pterimagecookie === "error") {
        if (window.location.href.includes("https://pterclub.com/uploadgameinfo.php")){
            alert("猫站图床Cookies或key未找到,正在前往获取!如弹出被阻止 请允许该弹窗或自行前往 https://s3.pterclub.com/getcookies 获取")
            window.open('https://s3.pterclub.com/getcookies')
        }
        else if (window.location.href.includes("https://s3.pterclub.com/getcookies")) get_pterimage()
    }


    const gameid = $("#gameid");
    gameid.after(
        '<a href="javascript:;" id="fill_win" style="color:green">Win</a> <a href="javascript:;" id="fill_lin" style="color:blue">Lin</a> <a href="javascript:;" id="fill_mac" style="color:orange">Mac</a> <a href="javascript:;" id="fill_ns" style="color:red">NS</a> <a href="javascript:;" id="fill_ps4" style="color:grey">PS4</a>' ) ;
    $('#fill_win').click(function () { triger(gameid); $("#console").val("16"); });
    $('#fill_lin').click(function () { triger(gameid); $("#console").val("46"); });
    $('#fill_mac').click(function () { triger(gameid); $("#console").val("37"); });
    $('#fill_ns').click(function () { triger(gameid); $("#console").val("20"); });
    $('#fill_ps4').click(function () { triger(gameid); $("#console").val("31"); });
})();