自动更改生日

名字后面加蛋糕!

  1. // ==UserScript==
  2. // @name 自动更改生日
  3. // @namespace https://linux.do
  4. // @version 0.0.6
  5. // @description 名字后面加蛋糕!
  6. // @author DengDai
  7. // @match https://linux.do/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=linux.do
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @grant GM_xmlhttpRequest
  12. // @grant GM_addStyle
  13. // @grant GM_log
  14. // @license MIT
  15. // @run-at document-idle
  16. // ==/UserScript==
  17.  
  18. (async function () {
  19. 'use strict';
  20.  
  21. // 获取当前日期
  22. const currentDate = new Date().toLocaleDateString();
  23.  
  24. // 检查本地存储中是否已经记录了今天的日期(使用GM_getValue代替localStorage)
  25. let lastExecutedDate = GM_getValue('lastExecutedDate');
  26.  
  27. // 如果本地存储中的日期与当前日期不相等,说明今天还没执行过
  28. if (!lastExecutedDate || lastExecutedDate !== currentDate) {
  29. try {
  30. setTimeout(function() {
  31. const now = new Date();
  32. const month = now.getMonth() + 1;
  33. const day = now.getDate();
  34. const date_of_birth = `2004-${month}-${day}`;
  35. let old_birthdate = "";
  36.  
  37. // 获取CSRF Token 和用户名
  38. const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
  39. const username = document.querySelector('[data-link-name="my-posts"]').getAttribute('href').split("/")[2];
  40. // 设置请求头
  41. const headers = {
  42. "accept": "*/*",
  43. "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
  44. "content-type": "application/json; charset=utf-8",
  45. "x-csrf-token": csrfToken,
  46. "x-requested-with": "XMLHttpRequest"
  47. };
  48. // 使用GM_xmlhttpRequest代替fetch
  49. GM_xmlhttpRequest({
  50. method: "GET",
  51. url: `https://linux.do/u/${username}.json`,
  52. headers,
  53. onload: function (response) {
  54. if (response.status !== 200) {
  55. throw new Error(`获取用户数据失败: ${response.statusText}`);
  56. }
  57. const data = JSON.parse(response.responseText);
  58. old_birthdate = data.user.birthdate;
  59.  
  60. // 检查生日是否需要更新
  61. if (old_birthdate && (parseInt(old_birthdate.split("-")[1]) === month) && (parseInt(old_birthdate.split("-")[2]) === day)) {
  62. console.log("无需修改!");
  63. } else {
  64. // 更新生日
  65. headers['content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
  66. GM_xmlhttpRequest({
  67. method: "PUT",
  68. url: `https://linux.do/u/${username}.json`,
  69. headers,
  70. data: `date_of_birth=${date_of_birth}`,
  71. onload: function (updateResponse) {
  72. if (updateResponse.status !== 200) {
  73. throw new Error(`更新生日失败: ${updateResponse.statusText}`);
  74. }
  75. console.log("已经修改!");
  76. },
  77. onerror: function (err) {
  78. console.error('更新生日请求失败:', err);
  79. }
  80. });
  81. }
  82.  
  83. // 记录当前日期到GM_setValue,表示今天已经执行过
  84. GM_setValue('lastExecutedDate', currentDate);
  85. },
  86. onerror: function (err) {
  87. console.error('获取用户数据请求失败:', err);
  88. }
  89. });
  90.  
  91. }, 3000);
  92. } catch (err) {
  93. console.error('操作失败:', err.message);
  94. }
  95. }
  96. })();