NSFW-Profile Links Adder

Добавляет кнопки с ссылками на Coomer, Kemono, Bunkr, Social Media Girls и Pornolab, используя юзернейм с OnlyFans, Patreon, Fansly и Boosty.

Mint 2025.01.28.. Lásd a legutóbbi verzió

  1. // ==UserScript==
  2. // @name NSFW-Profile Links Adder
  3. // @namespace https://greasyfork.org/ru/users/1373266-godinraider
  4. // @version 1.9
  5. // @description Добавляет кнопки с ссылками на Coomer, Kemono, Bunkr, Social Media Girls и Pornolab, используя юзернейм с OnlyFans, Patreon, Fansly и Boosty.
  6. // @author GodinRaider
  7. // @match *onlyfans.com/*
  8. // @match *patreon.com/*
  9. // @match *fansly.com/*
  10. // @match *boosty.to/*
  11. // @grant none
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. 'use strict';
  17.  
  18. // Функция для извлечения юзернейма из URL
  19. function getUsername() {
  20. const path = window.location.pathname.replace(/^\/+|\/+$/g, ''); // Удаляем слэши в начале и конце
  21. return path.split('/')[0]; // Берем первую часть пути (юзернейм)
  22. }
  23.  
  24. // Функция для создания кнопок
  25. function createButtons(username) {
  26. const containerId = 'nsfw-profile-links-container';
  27.  
  28. // Удаляем старый контейнер, если он существует
  29. const oldContainer = document.getElementById(containerId);
  30. if (oldContainer) oldContainer.remove();
  31.  
  32. // Если юзернейм отсутствует, ничего не делаем
  33. if (!username) return;
  34.  
  35. // Создаем новый контейнер для кнопок
  36. const container = document.createElement('div');
  37. container.id = containerId;
  38. container.style.position = 'fixed';
  39. container.style.top = '100px';
  40. container.style.left = '10px';
  41. container.style.zIndex = '10000';
  42. container.style.display = 'flex';
  43. container.style.flexDirection = 'column';
  44. container.style.gap = '10px';
  45.  
  46. // Определяем текущий сайт
  47. const isPatreon = window.location.hostname.includes('patreon.com');
  48. const isFansly = window.location.hostname.includes('fansly.com');
  49. const isBoosty = window.location.hostname.includes('boosty.to');
  50. const isOnlyFans = window.location.hostname.includes('onlyfans.com');
  51.  
  52. // Конфигурация кнопок
  53. const buttons = [
  54. {
  55. href: isPatreon
  56. ? `https://kemono.su/artists?q=${username}&service=patreon&sort_by=favorited&order=desc`
  57. : isBoosty
  58. ? `https://kemono.su/artists?q=${username}&service=boosty&sort_by=favorited&order=desc`
  59. : isFansly
  60. ? `https://coomer.su/artists?q=${username}&service=fansly&sort_by=favorited&order=desc`
  61. : `https://coomer.su/artists?q=${username}&service=&sort_by=favorited&order=desc`,
  62. icon: isPatreon || isBoosty
  63. ? 'https://kemono.su/favicon.ico'
  64. : 'https://coomer.su/favicon.ico',
  65. title: isPatreon
  66. ? 'Kemono Patreon Search'
  67. : isBoosty
  68. ? 'Kemono Boosty Search'
  69. : isFansly
  70. ? 'Coomer Fansly Search'
  71. : 'Coomer Search'
  72. },
  73. {
  74. href: `https://bunkr-albums.io/?search=${username}`,
  75. icon: 'https://status.bunkr.ru/icon.svg',
  76. title: 'Bunkr Search'
  77. },
  78. {
  79. href: `https://forums.socialmediagirls.com/search/?q=${username}`,
  80. icon: 'https://forums.socialmediagirls.com/favicon.ico',
  81. title: 'Social Media Girls Search'
  82. },
  83. {
  84. href: `https://pornolab.net/forum/tracker.php?o=1&s=2&tm=-1&nm=${username}&f=-1`,
  85. icon: 'https://pornolab.net/favicon.ico',
  86. title: 'Pornolab Search'
  87. }
  88. ];
  89.  
  90. // Добавляем стиль для анимаций
  91. const style = document.createElement('style');
  92. style.textContent = `
  93. .profile-link-button {
  94. transition: transform 0.2s ease, box-shadow 0.2s ease;
  95. }
  96. .profile-link-button:hover {
  97. transform: scale(1.1);
  98. box-shadow: 0 8px 12px rgba(0, 0, 0, 0.2);
  99. }
  100. .profile-link-button:active {
  101. transform: scale(0.95);
  102. box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
  103. }
  104. `;
  105. document.head.appendChild(style);
  106.  
  107. // Создаем кнопки и добавляем их в контейнер
  108. buttons.forEach(({ href, icon, title }) => {
  109. const button = document.createElement('a');
  110. button.href = href;
  111. button.target = '_blank';
  112. button.title = title;
  113. button.className = 'profile-link-button';
  114. button.style.width = '50px';
  115. button.style.height = '50px';
  116. button.style.display = 'flex';
  117. button.style.alignItems = 'center';
  118. button.style.justifyContent = 'center';
  119. button.style.backgroundColor = '#fff';
  120. button.style.border = '1px solid #ccc';
  121. button.style.borderRadius = '5px';
  122. button.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)';
  123.  
  124. const img = document.createElement('img');
  125. img.src = icon;
  126. img.alt = title;
  127. img.style.width = '24px';
  128. img.style.height = '24px';
  129. img.style.objectFit = 'contain';
  130. button.appendChild(img);
  131.  
  132. container.appendChild(button);
  133. });
  134.  
  135. // Добавляем контейнер с кнопками на страницу
  136. document.body.appendChild(container);
  137. }
  138.  
  139. // Инициализируем кнопки
  140. createButtons(getUsername());
  141. })();