Greasy Fork

Greasy Fork is available in English.

虎牙直播挖宝

虎牙直播自动挖宝

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         虎牙直播挖宝
// @namespace    http://tampermonkey.net/
// @version      0.1.3
// @description  虎牙直播自动挖宝
// @author       睿智的河水
// @match        *://*.huya.com/*
// @grant        none
// ==/UserScript==

(function () {
  'use strict'

  const $ = window.$
  const styleData = `
    .chat-room__gift {
      position: relative;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
    .room-chat-tool-gift {
      display: inline-block;
      width: 24px;
      height: 24px;
      margin-top: -2px;
      background: url("https://huyaimg.msstatic.com/cdnimage/actprop/20293_1__45_1547818438.jpg") center no-repeat;
      background-size: contain;
      filter: grayscale(1);
      opacity: .65;
    }
    .room-chat-tool-gift:hover {
      opacity: 1;
    }
    #gift-main {
      position: relative;
      height: 100%;
      display: flex;
      flex-direction: column;
    }
    #gift-list {
      height: 100%;
      overflow: auto;
      scroll-behavior: smooth;
    }
    #gift-list li {
      font-size: 12px;
      padding: 6px 0;
      margin: 0 10px;
      border-bottom: 1px solid #eee;
    }
    #gift-list li > div {
      display: block;
      margin: 3px 0px;
    }
    #gift-list li .time {
      color: #aaa;
    }
    #gift-list li .host {
      padding-left: 18px;
      margin-left: 3px;
      color: #f80;
      background: url(https://a.msstatic.com/huya/main3/assets/img/room/bussType_icon_c974b.png) left center no-repeat;
    }
    #gift-list li .info {
      color: #444;
    }
    #gift-list li .info i {
      font-style: normal;
      color: #3c9cfe;
    }
    #gift-list li .status {
      color: #999;
    }
    #gift-list li .winner {
      color: #d35757;
    }
    #gift-status {
      display: flex;
      align-items: baseline;
      font-size: 13px;
      padding: 6px;
      margin: 0 6px 6px;
      background: #f5f5f5;
      border: 1px solid #eee;
      border-radius: 3px;
    }
    #gift-status .time {
      color: #aaa;
      margin-right: 6px;
    }
    #gift-status .info {
      color: #999;
    }
    #gift-status .info i {
      font-style: normal;
      color: #f80;
    }
  `
  function localGet (key) {
    return JSON.parse(localStorage.getItem(key))
  }
  function localSet (key, val) {
    return localStorage.setItem(key, JSON.stringify(val))
  }
  function localRemove (key) {
    return localStorage.removeItem(key)
  }
  function updateGift (el, html, save = false) {
    const $giftEl = $('.chat-room__gift')
    let $giftMain = $('#gift-main')

    if (!$giftMain.length) {
      $giftMain = $('<div id="gift-main" class="chat-room__scroll"></div>')

      const $clearEl = $('<p class="clearBtn"><i></i><span>清除历史数据</span></p>')
      $clearEl.on('click', () => {
        $('#gift-list').html('')
        localRemove('giftHistory')
      })

      $giftMain.append($('<ul id="gift-list" class="gift-list"></ul>'))
      $giftMain.append($('<div id="gift-status" class="gift-status"></div>'))
      $giftMain.append($clearEl)
      $giftEl.append($giftMain)
    }

    switch (el) {
      case 'list':
        const $list = $('#gift-list')
        $list.append($(`<li>${html}</li>`))
        $list.scrollTop($list[0].scrollHeight)

        if (save) {
          const giftHistory = localGet('giftHistory') || []
          giftHistory.push(html)
          localSet('giftHistory', giftHistory)
        }
        break
      case 'status':
        $('#gift-status').html(html)
        break
    }
  }
  function loopGift () {
    const date = new Date().toLocaleString('zh-Hans-CN')
    const $btn = $('#J_treasureChestContainer .btn-wrap .btn')

    if (!$btn.length) {
      updateGift('status', `<div class="time">[${date}]</div><div class="info">等待宝藏掉落...</div>`)
      setTimeout(() => {
        loopGift()
      }, 500)
      return
    }

    const btnVal = $btn.text()
    const nick = $('#J_treasureChestContainer .waitTips .nick').text()
    const gName = $('#J_treasureChestContainer .waitTips .aName').text()
    const number = $('#J_treasureChestContainer .num').text()

    if (/\d+:\d+/.test(btnVal)) {
      const [min, sec] = btnVal.split(':')
      const time = Number(min) * 60 + Number(sec)
      updateGift('status', `<div class="time">[${time}s]</div><div class="info">准备挖<i>${nick}</i>${gName},还剩${number}个</div>`)
    } else if (btnVal === '领取') {
      $btn.trigger('click')

      setTimeout(() => {
        const status = $('#watchChat_pub .treasureChest-tips .tct-cont').text()
        const hostName = $('.host-name').text()
        const hostLink = window.TT.app.main + window.TT_ROOM_DATA.profileRoom

        let cls = 'class="status"'
        if (/恭喜/.test(status)) {
          cls = 'class="status winner"'
        }

        updateGift('list', `<div class="time">[${date}] <a class="host" href="${hostLink}">${hostName}</a></div><div class="info"><i>${nick}</i>${gName}:</div><div ${cls}>${status}</div>`, true)
      }, 1000)
    } else {
      updateGift('status', `<div class="time">[${btnVal}]</div><div class="info">${
        number > 0 ? `等待中,还剩${number}个` : '当前宝藏已挖完'
      }</div>`)
    }
    requestAnimationFrame(loopGift)
  }

  $(document).ready(() => {
    const $chatRoom = $('#chatRoom')

    if (!$chatRoom.length) {
      return
    }

    const $chatPanel = $('#chatRoom .chat-room__bd')
    const $giftPanel = $('<div class="chat-room__bd chat-room__gift" style="display: none;"></div>')
    const $giftIcon = $('<i class="room-chat-tool room-chat-tool-gift" id="J-room-chat-gift" title="自动挖宝"></i>')

    $giftIcon.on('click', () => {
      $chatPanel.toggle()
      $giftPanel.toggle()
      $('#gift-list').scrollTop($('#gift-list')[0].scrollHeight)
    })

    $('head').append($(`<style>${styleData}</style>`))
    $('.room-chat-tools').append($giftIcon)

    $giftPanel.height($chatPanel.height())
    $chatRoom.append($giftPanel)

    $('#J_playerMain').on('resize', () => {
      $giftPanel.height($chatPanel.height())
    })

    const giftHistory = localGet('giftHistory') || []
    if (giftHistory.length) {
      giftHistory.forEach(v => {
        updateGift('list', v)
      })
    }

    loopGift()
  })
})()