Nitro Type Friends List Exporter

Export racer names with gold detection and race count filtering

  1. // ==UserScript==
  2. // @name Nitro Type Friends List Exporter
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.5
  5. // @description Export racer names with gold detection and race count filtering
  6. // @match https://www.nitrotype.com/friends
  7. // @grant none
  8. // @license MIT
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. let menu = document.createElement('div');
  15. menu.style.position = 'fixed';
  16. menu.style.top = '10px';
  17. menu.style.right = '10px';
  18. menu.style.background = 'black';
  19. menu.style.color = 'white';
  20. menu.style.padding = '10px';
  21. menu.style.borderRadius = '5px';
  22. menu.style.zIndex = '10000';
  23.  
  24. let exportButton = document.createElement('button');
  25. exportButton.innerText = 'Export Racer List';
  26. exportButton.style.padding = '5px';
  27. exportButton.style.cursor = 'pointer';
  28.  
  29. menu.appendChild(exportButton);
  30. document.body.appendChild(menu);
  31.  
  32. exportButton.addEventListener('click', () => {
  33. let racerRows = document.querySelectorAll('.table-row.friends-list--row'); // Corrected row selector
  34. let racerList = [];
  35.  
  36. racerRows.forEach(row => {
  37. let nameCell = row.querySelector('.type-ellip'); // Racer's display name
  38. let raceCell = row.querySelector('.table-cell.table-cell--races'); // Race count
  39.  
  40. if (nameCell && raceCell) {
  41. let raceCount = parseInt(raceCell.textContent.replace(/,/g, ''));
  42. let isGold = nameCell.classList.contains('type-gold'); // Detect gold racers
  43.  
  44. if (isGold || raceCount > 5000) {
  45. racerList.push(nameCell.textContent.trim());
  46. }
  47. }
  48. });
  49.  
  50. if (racerList.length === 0) {
  51. showErrorMessage(); // Show error popup if no racers meet criteria
  52. } else {
  53. let data = racerList.join('\n');
  54. let blob = new Blob([data], { type: 'text/plain' });
  55. let a = document.createElement('a');
  56. a.href = URL.createObjectURL(blob);
  57. a.download = 'top_racers.txt';
  58. a.click();
  59. }
  60. });
  61.  
  62. function showErrorMessage() {
  63. let errorMenu = document.createElement('div');
  64. errorMenu.style.position = 'fixed';
  65. errorMenu.style.top = '50px';
  66. errorMenu.style.left = '50%';
  67. errorMenu.style.transform = 'translateX(-50%)';
  68. errorMenu.style.background = 'black';
  69. errorMenu.style.color = 'white';
  70. errorMenu.style.padding = '15px';
  71. errorMenu.style.borderRadius = '5px';
  72. errorMenu.style.zIndex = '10000';
  73. errorMenu.innerText = 'Error No4, No friends detected';
  74.  
  75. let closeButton = document.createElement('button');
  76. closeButton.innerText = 'X';
  77. closeButton.style.marginLeft = '10px';
  78. closeButton.style.background = 'red';
  79. closeButton.style.color = 'white';
  80. closeButton.style.border = 'none';
  81. closeButton.style.cursor = 'pointer';
  82.  
  83. closeButton.addEventListener('click', () => {
  84. errorMenu.remove();
  85. });
  86.  
  87. errorMenu.appendChild(closeButton);
  88. document.body.appendChild(errorMenu);
  89. }
  90.  
  91. })();