提升卡记录

查看用户的提升卡使用记录

  1. "use strict";
  2. // ==UserScript==
  3. // @name 提升卡记录
  4. // @version 0.1.5
  5. // @match https://www.mcbbs.net/home.php?mod=space*
  6. // @match https://www.mcbbs.net/?*
  7. // @match https://www.mcbbs.net/forum.php?mod=viewthread&tid=*
  8. // @match https://www.mcbbs.net/thread-*.html
  9. // @author xmdhs
  10. // @license MIT
  11. // @description 查看用户的提升卡使用记录
  12. // @namespace https://gf.qytechs.cn/users/166541
  13. // ==/UserScript==
  14. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  15. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  16. return new (P || (P = Promise))(function (resolve, reject) {
  17. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  18. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  19. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  20. step((generator = generator.apply(thisArg, _arguments || [])).next());
  21. });
  22. };
  23. (() => __awaiter(void 0, void 0, void 0, function* () {
  24. if (location.href.startsWith("https://www.mcbbs.net/home.php?mod=space") || location.href.startsWith("https://www.mcbbs.net/?")) {
  25. yield userPage();
  26. return;
  27. }
  28. else {
  29. let doms;
  30. try {
  31. doms = document.querySelectorAll("div.pi > div > a.xw1");
  32. }
  33. catch (e) {
  34. return;
  35. }
  36. let i = 0;
  37. for (const dom of Array.from(doms)) {
  38. i++;
  39. if (!(dom instanceof HTMLAnchorElement)) {
  40. continue;
  41. }
  42. let u = new URL(dom.href);
  43. const uid = u.searchParams.get("uid");
  44. if (!uid)
  45. continue;
  46. dosome(uid, dom, 0);
  47. if (i > 5) {
  48. yield new Promise((r) => setTimeout(r, 1000));
  49. i = 0;
  50. }
  51. }
  52. }
  53. function userPage() {
  54. return __awaiter(this, void 0, void 0, function* () {
  55. const uid = getuid();
  56. if (uid === null) {
  57. alert("无法获取 uid");
  58. return;
  59. }
  60. let d = {
  61. data: [],
  62. msg: "",
  63. code: 0
  64. };
  65. let f = yield fetch(`https://auto.xmdhs.com/getforuid?uid=` + uid);
  66. d = yield f.json();
  67. if (d.code != 0) {
  68. console.warn(d.msg);
  69. alert(d.msg);
  70. return;
  71. }
  72. const profile = document.querySelector(".bm_c.u_profile");
  73. if (profile && profile.lastElementChild) {
  74. profile.lastElementChild.className = "pbm mbm bbda cl";
  75. }
  76. const p = document.querySelector("#ct > div > div.bm.bw0 > div > div.bm_c.u_profile");
  77. const div = document.createElement("div");
  78. p ? p.appendChild(div) : console.warn("没有找到");
  79. const text = document.createElement("h2");
  80. text.className = "mbn";
  81. text.innerText = "提升卡记录";
  82. div.appendChild(text);
  83. if (d.data == null) {
  84. console.log("没有数据");
  85. return;
  86. }
  87. div.appendChild(makeTable(d.data));
  88. });
  89. }
  90. function countData(data) {
  91. let m = {};
  92. for (const v of data) {
  93. if (v.operation.indexOf("提升卡") == -1) {
  94. continue;
  95. }
  96. if (m[v.tid] == undefined) {
  97. m[v.tid] = { count: 1, lastime: v.time };
  98. }
  99. else {
  100. m[v.tid].count++;
  101. v.time > m[v.tid].lastime && (m[v.tid].lastime = v.time);
  102. }
  103. }
  104. let l = [];
  105. for (const key in m) {
  106. let v = m[key];
  107. l.push({
  108. count: v.count,
  109. lastime: v.lastime,
  110. tid: Number(key)
  111. });
  112. }
  113. l.sort((a, b) => b.lastime - a.lastime);
  114. return l;
  115. }
  116. function makeTable(data) {
  117. const c = countData(data);
  118. let table = document.createElement("table");
  119. table.className = "bm dt";
  120. let tbody = document.createElement("tbody");
  121. table.appendChild(tbody);
  122. let tr = document.createElement("tr");
  123. tbody.appendChild(tr);
  124. tr.innerHTML = `<th class="xw1">tid</th><th class="xw1">数量</th><th class="xw1">上一次顶贴时间</th>`;
  125. for (const v of c) {
  126. let trr = document.createElement("tr");
  127. tbody.appendChild(trr);
  128. addTr(trr, `<a href="https://www.mcbbs.net/thread-${v.tid}-1-1.html" target="_blank">${v.tid}</a>`, true);
  129. addTr(trr, String(v.count));
  130. addTr(trr, transformTime(v.lastime));
  131. }
  132. return table;
  133. }
  134. function addTr(item, v, h) {
  135. let t = document.createElement("td");
  136. if (h === true) {
  137. t.innerHTML = v;
  138. }
  139. else {
  140. t.innerText = v;
  141. }
  142. item.appendChild(t);
  143. }
  144. function transformTime(timestamp) {
  145. var time = new Date(timestamp * 1000);
  146. var y = time.getFullYear();
  147. var M = time.getMonth() + 1;
  148. var d = time.getDate();
  149. var h = time.getHours();
  150. var m = time.getMinutes();
  151. return y + '-' + addZero(M) + '-' + addZero(d) + ' ' + addZero(h) + ':' + addZero(m);
  152. }
  153. function addZero(m) {
  154. return m < 10 ? '0' + String(m) : String(m);
  155. }
  156. function getuid() {
  157. let u = new URL(location.href);
  158. let uid = u.searchParams.get('uid');
  159. if (uid && uid.length > 0) {
  160. return uid;
  161. }
  162. let dom = document.querySelector("#uhd > div > div > a");
  163. if (dom.href.length > 0) {
  164. u = new URL(dom.href);
  165. return u.searchParams.get('uid');
  166. }
  167. return null;
  168. }
  169. function dosome(uid, dom, i) {
  170. var _a, _b, _c;
  171. return __awaiter(this, void 0, void 0, function* () {
  172. i++;
  173. if (i > 3) {
  174. console.warn(`${uid} 失败超过3次,跳过`);
  175. return;
  176. }
  177. try {
  178. const data = yield getData(uid);
  179. if (data.length == 0) {
  180. return;
  181. }
  182. const dd = document.createElement("dd");
  183. let c = 0;
  184. data.forEach(v => {
  185. if (v.operation.indexOf("提升卡") != -1) {
  186. c++;
  187. }
  188. });
  189. dd.textContent = `${c} 张`;
  190. const dt = document.createElement("dt");
  191. const timg = document.createElement("img");
  192. timg.src = "https://www.mcbbs.net/source/plugin/mcbbs_mcserver_plus/magic/magic_serverBump.small.gif";
  193. timg.style.verticalAlign = "middle";
  194. dt.textContent = ` 提升`;
  195. dt.style.color = "red";
  196. dt.style.fontWeight = "bold";
  197. dt.insertBefore(timg, dt.firstChild);
  198. const dl = (_c = (_b = (_a = dom === null || dom === void 0 ? void 0 : dom.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.parentNode) === null || _c === void 0 ? void 0 : _c.querySelector("dl.pil");
  199. dl === null || dl === void 0 ? void 0 : dl.appendChild(dt);
  200. dl === null || dl === void 0 ? void 0 : dl.appendChild(dd);
  201. }
  202. catch (e) {
  203. console.warn(e);
  204. yield new Promise((r) => setTimeout(r, 2000));
  205. yield dosome(uid, dom, i);
  206. }
  207. });
  208. }
  209. function getData(uid) {
  210. return __awaiter(this, void 0, void 0, function* () {
  211. let f = yield fetch(`https://auto.xmdhs.com/getforuid?uid=` + uid);
  212. let d = {
  213. data: [],
  214. msg: "",
  215. code: 0
  216. };
  217. d = yield f.json();
  218. if (d.code != 0) {
  219. throw new Error(d.msg);
  220. }
  221. if (d.data == null) {
  222. return [];
  223. }
  224. return d.data;
  225. });
  226. }
  227. }))();
  228. //# sourceMappingURL=bump.user.js.map

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址