Greasy Fork is available in English.

米游社_水经验原神签到工具

米游社 原神签到 发水主贴 发水评论 点赞 反正就是水经验

// ==UserScript==
// @name         米游社_水经验原神签到工具
// @namespace    https://space.bilibili.com/52159566
// @version      0.7
// @description  米游社 原神签到 发水主贴 发水评论 点赞 反正就是水经验
// @author       苏芣苡
// @match        *://*/*
// @icon         https://q.qlogo.cn/g?b=qq&s=100&nk=318328258
// @require      https://cdn.jsdelivr.net/npm/js-md5@0.7.3/build/md5.min.js
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_notification
// @connect      api-takumi.mihoyo.com
// @connect      bbs-api.mihoyo.com
// @run-at       document-end
// @grant        unsafeWindow
// @license      MIT
// ==/UserScript==

function Rn(min,max){
    return Math.floor(Math.random()*(max-min+1)+min)
}

function ds() {
    var s = 'h8w582wxwgqvahcdkpvdhbh2w9casgfl'
    var t = Math.floor(Date.now() / 1000)
    var r = Math.random().toString(36).slice( - 6)
    var c = 'salt=' + s + '&t=' + t + '&r=' + r
    var ds = t + ',' + r + ',' + md5(c)
    return ds
}

var headers = {
    'Referer': 'https://bbs.mihoyo.com/',
    'DS': ds(),
    'x-rpc-app_version': '2.3.0',
    'x-rpc-client_type': '5',
    'x-rpc-device_id': 'bd7f912e-908c-3692-a520-e70206823495',
}

var mpid=[9873884]
//防止出毛病感觉多设一点好了。。。
for (var i=0; i<30; i++)
{
    mpid.push(Rn(6000000,9870000))
}

var siPost,siReply,siUpvote

//发主帖 (有时间限制)
function mPost(){
    var url = 'https://bbs-api.mihoyo.com/post/wapi/releasePost'
    var data = {"collection_id":0,
                "content":"<p>水贴谁是第一?</p><p>【苏芣苡】天下第一!</p>",
                "cover":"",
                "draft_id":"666",
                "f_forum_id":0,
                "forum_id":0,"gids":"2",
                "is_original":0,
                "post_id":"",
                "structured_content":"[{\"insert\":\"水贴谁是第一?\\n【苏芣苡】天下第一!\\n\"}]",
                "subject":"【苏芣苡】天下第一",
                "topic_ids":["180"],
                "view_type":1
               }
    var sData = JSON.stringify(data)

    GM_xmlhttpRequest({
        url: url,
        method: 'POST',
        data: sData,
        headers: headers,
        onload: function(xhr) {
            var re = (xhr.responseText)
            console.log("发帖:"+re)
            var json = JSON.parse(re)
            if (json.message == "OK") {
                GM_setValue('vPost',GM_getValue('vPost',0)+1)
            }
            if(GM_getValue('vPost',0)>=2){
                ShowToast("发主贴经验已混完!", 3)
                GM_notification({
                    title: "[米游社 水经验]",
                    text: "发主贴经验已混完!",
                })
            }
        }
    })
}

//发评论 (有时间限制)
function mReply(){
    var url = 'https://bbs-api.mihoyo.com/post/wapi/releaseReply'
    var data = {
        "content":"<p>苏芣苡天下第一!</p>",
        "gids":"2",
        "post_id":"9873884",
        "structured_content":"[{\"insert\":\"苏芣苡天下第一!\\n\"}]"
    }
    var sData = JSON.stringify(data)

    GM_xmlhttpRequest({
        url: url,
        method: 'POST',
        data: sData,
        headers: headers,
        onload: function(xhr) {
            var re = (xhr.responseText)
            console.log("评论:"+re)
            var json = JSON.parse(re)
            if (json.message == "OK") {
                GM_setValue('vReply',GM_getValue('vReply',0)+1)
            }
            if(GM_getValue('vReply',0)>=3){
                ShowToast("发评论经验已混完!", 3)
                GM_notification({
                    title: "[米游社 水经验]",
                    text: "发评论经验已混完!",
                })
            }
        }
    })
}

//点赞 (这个没有时间限制)
function mUpvote(){
    var tip = 0
    for (var i in mpid) {
        var id = mpid[i].toString()
        var url = 'https://bbs-api.mihoyo.com/apihub/api/upvotePost'
        var data = {"gids":"2",
                    "is_cancel":false,
                    "post_id":id
                   }
        var sData = JSON.stringify(data)

        GM_xmlhttpRequest({
            url: url,
            method: 'POST',
            data: sData,
            headers: headers,
            onload: function(xhr) {
                var re = (xhr.responseText)
                console.log("点赞:"+re)
                var json = JSON.parse(re)
                if (json.message == "OK") {
                    GM_setValue('vUpvote',GM_getValue('vUpvote',0)+1)
                }
                if(GM_getValue('vUpvote',0)>=10){
                    if(tip == 0){
                        tip = 2
                        ShowToast("点赞经验已混完!", 3)
                        GM_notification({
                            title: "[米游社 水经验]",
                            text: "点赞经验已混完!",
                        })
                    }
                }
            }
        })
    }
}


function Multiline(string) {
    var str = string.toString().split('\n')
    return str.slice(1, str.length - 1).join('\n')
}

function su_style() {/*
#Su-1_kawaii{
    position: fixed;
    z-index: 999999999;
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
    background: #44444488;
}
#Su-1_Out{
    position: absolute;
    z-index: 80;
    height: 200px;
    width: 660px;
    margin-top: -100px;
    margin-left: -330px;
    top: 50%;
    left: 50%;
    background: #4e6ef2e8;
    border-radius: 20px;
    justify-content: center;
    padding-top: 50px;
}
#Su-1_In{
    height: 100%;
    width: 100%;
    line-height: 40px;
    text-align: center;
    cursor: pointer;
    font-size: 24px;
    text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0;
    color: #fff;
}
#Su-1_kawaii a {
    text-decoration: none;
    color: #f00;
}
*/}

GM_addStyle(Multiline(su_style))

function ShowToast(str, s) {
    var ele = '<div id="Su-1_kawaii"><div id="Su-1_Out"><div id="Su-1_In">' + str + '</div></div></div>'
    let toast = document.createElement('su')
    toast.innerHTML = ele
    document.querySelector('body').append(toast)
    if (s > 0) {
        setInterval(function() { toast.remove() },s * 1000)
    }
}

var host = window.location.href
var mihoyo = "bbs.mihoyo.com"
var ysweb = host.indexOf(mihoyo)
var ysurl = "https://bbs.mihoyo.com/ys/"

var date = new Date()
var today = date.toLocaleDateString()

var data, uid, region, region_name, nickname, level, message

GM_registerMenuCommand('加个关注呗!', function(){ window.open("https://space.bilibili.com/52159566")})
GM_registerMenuCommand('前往米游社!', function(){ window.open("https://bbs.mihoyo.com/ys/")})

GM_registerMenuCommand('【水经验开关】',function(){
    if(GM_getValue('hExp','关闭')=='关闭'){
        GM_setValue('hExp','打开')
    }else{
        GM_setValue('hExp','关闭')
    }
    ShowToast("水经验开关状态:"+GM_getValue('hExp','关闭')+"<br>详细看<a target='_blank' href='https://greasyfork.org/zh-CN/scripts/432059'>脚本安装页</a>说明。。。<br>感觉可能会出BUG。。。", 3)
    GM_notification({
        title: "[米游社 水经验]",
        text: "水经验开关状态:"+GM_getValue('hExp','关闭')+"\n详细看安装页说明。。。\n感觉可能会出BUG。。。",
        ondone: () =>{ window.open('https://greasyfork.org/zh-CN/scripts/432059') },
    })
})

GM_registerMenuCommand('再整一个号!',function(){
    GM_setValue('SignState','苏芣苡')
})

if (GM_getValue('SignState', '苏芣苡') != today) {

    GM_setValue('vPost', 0)
    GM_setValue('vReply', 0)
    GM_setValue('vUpvote', 0)
    GM_setValue('ExpT','苏芣苡')

    GM_xmlhttpRequest({
        url: "https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=hk4e_cn",
        method: "GET",
        onload: function(xhr) {
            var json = JSON.parse(xhr.responseText)
            if (json.retcode !== 0) {
                if (ysweb < 0) {
                    GM_notification({
                        title: "[米游社 原神签到]\n帐号未登录!",
                        text: "点击前往登录!",
                        ondone: () =>{ window.open(ysurl) },
                    })
                    ShowToast('[米游社 原神签到]<br>帐号未登录!<br><a target="_blank" href=' + ysurl + '>点击前往登录!</a>', 5)
                } else {
                    GM_notification({
                        title: "[米游社 原神签到]\n帐号未登录!",
                        text: "请登录帐号!",
                    })
                    ShowToast('[米游社 原神签到]<br>帐号未登录!<br>请登录帐号!', 1)
                }
            } else {
                var list = json.data.list
                for (var i in list) {

                    uid = json.data.list[i].game_uid
                    region = json.data.list[i].region
                    region_name = json.data.list[i].region_name
                    nickname = json.data.list[i].nickname
                    level = json.data.list[i].level

                    data = '{"act_id":"e202009291139501","region":"' + region + '","uid":"' + uid + '"}'

                    /*----------------------------------------------------------------------------------------------*/
                    GM_xmlhttpRequest({
                        url: 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign',
                        method: 'POST',
                        data: data,
                        headers: headers,
                        onload: function(xhr) {
                            var json = JSON.parse(xhr.responseText)
                            message = json.message
                            if (message == "OK") {
                                message = "今日打卡完成!"
                            }
                            var tips = '【' + region_name + '】[ Lv : ' + level + ']<br>[UID : ' + uid + ']【' + nickname + '】<br>' + message
                            GM_notification({
                                title: "[米游社 原神签到]\n签到成功!!",
                                text: '【' + region_name + '】[ Lv : ' + level + ']\n[UID : ' + uid + ']【' + nickname + '】\n' + message,
                            })
                            ShowToast(tips, 3)
                            GM_setValue('SignState', today)
                        }
                    })
                    /*----------------------------------------------------------------------------------------------*/
                }

            }
        }
    })
}



var sleep = 30

//执行发主贴
if(GM_getValue('vPost',0)<2 && GM_getValue('hExp','关闭')!='关闭'){
    mPost()
    siPost = setInterval(function(){
        if(GM_getValue('vPost',0)<2){
            mPost()
        }else{
            clearInterval(siPost)
        }
    },1000*sleep)
}

//执行发评论
if(GM_getValue('vReply',0)<3 && GM_getValue('hExp','关闭')!='关闭'){
    mReply()
    siReply = setInterval(function(){
        if(GM_getValue('vReply',0)<3){
            mReply()
        }else{
            clearInterval(siReply)
        }
    },1000*sleep)
}

//执行点赞
if(GM_getValue('vUpvote',0)<10 && GM_getValue('hExp','关闭')!='关闭'){
    mUpvote()
    siUpvote = setInterval(function(){
        if(GM_getValue('vUpvote',0)<10){
            mUpvote()
        }else{
            clearInterval(siUpvote)
        }
    },1000*sleep)
}

if(GM_getValue('vPost',0)>=2 && GM_getValue('vReply',0)>=3 && GM_getValue('vUpvote',0)>=10 && GM_getValue('ExpT','苏芣苡')=='苏芣苡'){
    ShowToast("亲爱的旅行者呦~<br>脚本能混到手的经验都混完了呦~~~", 3)
    GM_notification({
        title: "[米游社 水经验]",
        text: "亲爱的旅行者呦~\n脚本能混到手的经验都混完了呦~~~",
    })
    GM_setValue('ExpT','混子苏芣苡东拼西凑做脚本。。。')
}