「GM 脚本」大会员 B 币领取提醒

2022-02-06 13:25:03 +08:00
 wdssmq

大部分脚本都以自用优先,所以可能塞了奇怪的功能进去,建议摘取需要的部分自行组织完整代码;

name:「 bilibili 」- 稍后再看导出为.url

desc:将 B 站的稍后再看列表导出为.url 文件

url: https://github.com/wdssmq/userscript/blob/master/bilibili/later.user.js

cdn: https://cdn.jsdelivr.net/gh/wdssmq/userscript@master/bilibili/later.user.js

以及,现在才知道 localStorage 并不能跨子域使用,所以用了 cookie ,其实好像用GM_setValue+GM_getValue也可以;

大会员 B 币领取提醒核心代码:

// @grant        GM_notification
// @grant        GM.openInTab

// ==/UserScript==
/* jshint esversion:6 */
(function () {
  "use strict";
  // 基础函数或变量
  const curUrl = window.location.href;
  const curDate = new Date();
  const $ = window.$ || unsafeWindow.$;
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  const _log = (...args) => console.log('[bilibili-helper]', ...args);
  const _warn = (...args) => console.warn('[bilibili-helper]', ...args);
  const _error = (...args) => console.error('[bilibili-helper]', ...args);
  function $n(e) {
    return document.querySelector(e);
  }
  function $na(e) {
    return document.querySelectorAll(e);
  }

  // cookie 封装
  const ckeObj = {
    setItem: function (key, value) {
      const Days = 137;
      const exp = new Date();
      exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
      document.cookie = key + "=" + encodeURIComponent(value) + ";path=/;domain=.bilibili.com;expires=" + exp.toGMTString();
    },
    getItem: function (key, def = "") {
      const reg = new RegExp("(^| )" + key + "=([^;]*)(;|$)");
      const arr = document.cookie.match(reg);
      if (arr) {
        return arr[2];
      }
      return def;
    }
  };

  // B 币领取提醒
  (() => {
    const ckeName = "bilibili-helper-bcoin-lstMonth";
    const curMonth = curDate.getMonth() + 1;
    const lstMonth = ckeObj.getItem(ckeName, 0);
    const bcoinUrl = "https://account.bilibili.com/account/big/myPackage";

    // 元素变化监听
    const fnElChange = (el, fn = () => { }) => {
      const observer = new MutationObserver((mutationRecord, mutationObserver) => {
        _log('body attributes changed!!!'); // body attributes changed!!!
        _log('mutationRecord = ', mutationRecord); // [MutationRecord]
        _log('mutationObserver === observer', mutationObserver === observer); // true
        fn(mutationRecord, mutationObserver);
        mutationObserver.disconnect();
      });
      observer.observe(el, {
        // attributes: false,
        // attributeFilter: ["class"],
        childList: true,
        // characterData: false,
        subtree: true,
      });
    }

    // 通知事件封装
    const fnNotify = (title, body) => {
      GM_notification({
        title: title,
        text: body,
        timeout: 0,
        onclick: () => {
          // window.location.href = bcoinUrl;
          GM.openInTab(bcoinUrl, false);
        }
      });
    }

    // 判断是否已经领取过
    const fnCheckByDOM = () => {
      const $bcoin = $n(".bcoin-wrapper");
      _log("---");
      // $bcoin && _log($bcoin.innerHTML);
      if ($bcoin && $bcoin.innerText.includes("本月已领")) {
        ckeObj.setItem(ckeName, curMonth);
        return true;
      } else {
        fnElChange($n("#app"), fnCheckByDOM);
      }
      return false;
    }

    // _log($n("body").innerHTML);
    // _log(lstMonth, curMonth);

    // 对比 cookie 数据
    if (lstMonth != curMonth) {
      _log(curUrl, bcoinUrl);
      if (curUrl.indexOf(bcoinUrl) > -1) {
        fnCheckByDOM();
      } else {
        fnNotify("B 币领取提醒", "点击查看 B 币领取情况");
      }
    }
  })();
})();
2995 次点击
所在节点    分享创造
6 条回复
qaweqa
2022-02-06 15:00:57 +08:00
发布在 GreasyFork 之类的网站可能比较好?
lower
2022-02-06 15:55:56 +08:00
有没有屏蔽 b 站指定视频的脚本?

按理说把某个 up 屏蔽了,他的作品也应该自动不推荐出来,可是垃圾 B 站还是乱七八糟一直在首页显示

好歹搞个 ytb 的不喜欢功能啊……
CallMeReznov
2022-02-06 19:40:09 +08:00
@lower #2 在外面点不推荐该 UP 的选项还是会推荐?
VZEXEZVzzz
2022-02-06 22:36:20 +08:00
感谢楼主让我知道大会员能领 B 币=0=
wlb955
2022-02-10 10:17:06 +08:00
能不能脚本直接给领了,然后给个领取成功 or 失败的反馈
wdssmq
2022-05-01 19:09:24 +08:00
userscript/bilibili at master · wdssmq/userscript

https://github.com/wdssmq/userscript/tree/master/bilibili

源码地址。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/832062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX