Discord - Custom Background Image

You can custom background image of Discord;

当前为 2021-11-22 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Discord - Custom Background Image
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description You can custom background image of Discord;
  6. // @author You
  7. // @match https://discord.com/channels/*/*
  8. // @icon https://www.google.com/s2/favicons?domain=discord.com
  9. // @grant GM.xmlHttpRequest
  10. // @connect i.imgur.com
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. (async window => {
  15. 'use strict';
  16. const intervalTime = 30 * 1000;
  17. const urls = [
  18. 'https://i.imgur.com/cHKbKQT.jpeg',
  19. 'https://i.imgur.com/sqmqy20.png',
  20. 'https://i.imgur.com/cCL6TPk.jpeg',
  21. 'https://i.imgur.com/Z6GYpxh.jpeg',
  22. 'https://i.imgur.com/Z6GYpxh.jpeg',
  23. 'https://i.imgur.com/FNJdY5h.jpeg',
  24. 'https://i.imgur.com/uKVG1XM.jpeg'
  25. ];
  26. const memo = new Map;
  27. const get = async url => {
  28. if(memo.has(url)) return memo.get(url);
  29. const res = await GM.xmlHttpRequest({
  30. method: 'GET',
  31. url: url,
  32. withCredentials: true,
  33. responseType: 'arraybuffer',
  34. });
  35. const _url = URL.createObjectURL(new Blob([res.response], {type: 'application/octet-binary'}));
  36. memo.set(url, _url);
  37. return _url;
  38. };
  39. let g_url = await get(urls[0]);
  40. const wait = resolve => {
  41. if(document.querySelector('[class^="chatContent"]')) return resolve();
  42. setTimeout(() => wait(resolve), 500);
  43. };
  44. await new Promise(resolve => wait(resolve));
  45. const set = () => {
  46. for(const v of document.querySelectorAll('*')) v.style.backgroundColor = 'rgba(0, 0, 0, 0)';
  47. document.body.children[0].children[3].style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
  48. Object.assign(document.body.children[0].style, {
  49. 'background-image': 'url("' + g_url + '")',
  50. 'background-attachment': 'fixed',
  51. 'background-position': 'center center',
  52. 'background-size': 'cover',
  53. 'background-repeat': 'no-repeat',
  54. 'transition-duration': '1.5s'
  55. });
  56. };
  57. set();
  58. let _url = location.href,
  59. _time = 0,
  60. index = 0;
  61. const update = async () => {
  62. const time = performance.now();
  63. if(time - _time > intervalTime) {
  64. _time = Infinity;
  65. g_url = await get(urls[(++index) % urls.length]);
  66. _time = time;
  67. set();
  68. }
  69. const url = location.href;
  70. if(url !== _url) {
  71. _url = url;
  72. set();
  73. }
  74. requestAnimationFrame(update);
  75. };
  76. update();
  77. })(window.unsafeWindow || window);