您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fixes some poor design choices on the Destiny 2 "Find Fireteam" page and filters out spam
- // ==UserScript==
- // @name Destiny 2 "Find Fireteam" improvements
- // @namespace D2FFI
- // @version 1.204
- // @description Fixes some poor design choices on the Destiny 2 "Find Fireteam" page and filters out spam
- // @author Richard "mindphlux" Kämmerer
- // @match https://www.bungie.net/en/ClanV2/FireteamSearch*
- // @match https://www.bungie.net/en/ClanV2/PublicFireteam*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=bungie.net
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- var clanAdverts = /КЛАН|клан|reclut[a|o|iamo]|recherche|recrute|recruit[e|ing|ment]|buscamo[s]|suche/;
- var spamStrings = /[carry|help]-d2|[fast\-|my]carry|d2[xur|\-sherpa]|game-job|sky[gold|coach]|trialsnow/;
- var defaultTitle = /(.*)\/\/(.*)/;
- var platformSelect = document.querySelector('select[name=platform]');
- var activitySelect = document.querySelector('select[name=activityType]');
- var languageSelect = document.querySelector('select[name=lang]');
- var disabled = document.querySelector('h2[class=section-header]');
- // we need to check which page the user is on so we can disable/enable features and prevent errors
- var currentPage = "";
- if(/FireteamSearch/.test(window.location.href)) {
- currentPage = "search";
- }
- else if(/PublicFireteam/.test(window.location.href)) {
- currentPage = "fireteam";
- }
- // if the API has been disabled (again) we'll display the @BungieHelp twitter feed so the user
- // can check what's going on instead of just seeing a mostly blank page
- // this only works on the Fireteam search page so we'll just return on any other page
- if(currentPage == "search") {
- if(disabled != null && disabled.innerHTML == "This feature is currently disabled.") {
- var disabledParent = disabled.closest('div');
- var twitterScript = document.createElement('script');
- twitterScript.type = 'text/javascript';
- twitterScript.src = 'https://platform.twitter.com/widgets.js';
- document.head.appendChild(twitterScript);
- var twitterEmbed = document.createElement('a');
- twitterEmbed.classList.add('twitter-timeline');
- twitterEmbed.dataset.theme = 'dark';
- twitterEmbed.href = 'https://twitter.com/BungieHelp?ref_src=twsrc%5Etfw';
- disabledParent.appendChild(twitterEmbed);
- return;
- }
- }
- else if(currentPage == "") return;
- var activities = {
- 0: "Anything",
- 2: "Crucible",
- 3: "Trials of Osiris",
- 4: "Nightfall",
- 5: "Up For Anything",
- 6: "Gambit",
- 7: "Blind Well",
- 12: "Nightmare Hunt",
- 14: "Altar of Sorrow",
- 20: "Raid: Last Wish",
- 21: "Raid: Garden of Salvation",
- 22: "Raid: Deep Stone Crypt",
- 23: "Exo Challenge",
- 25: "Empire Hunt",
- 27: "Exotic Quest",
- 28: "Raid: Vault of Glass",
- 33: "Dungeon: Shattered Throne",
- 34: "Dungeon: Prophecy",
- 35: "Dungeon: Pit of Heresy",
- 36: "Dares of Eternity",
- 37: "Dungeon: Grasp of Avarice",
- 38: "Raid: Vow of the Disciple",
- 39: "Campaign",
- 40: "The Wellspring",
- 41: "S16: Battlegrounds",
- 43: "Dungeon: Duality",
- 44: "S17: Nightmare Containment",
- 45: "S17: Sever",
- 47: "S18: Ketchcrash",
- 48: "S18: Expedition",
- 49: "S18: Pirate Hideout",
- 50: "Raid: King's Fall",
- 51: "Battlegrounds",
- 52: "Dungeon: Spire of the Watcher",
- 53: "S19: Operations",
- 54: "Looking For Help",
- 55: "Keep It Chill",
- };
- // remove Bungie advert and replace it with a warning about being not logged in if that's the case
- // since dynamically set body classes aren't available at script runtime we're checking cookies
- var cookies = document.cookie.split(";");
- var isLoggedIn = false;
- cookies.forEach((item) => {
- if(item.trim().startsWith("bunglesight")) isLoggedIn = true;
- });
- // only needed for Fireteam search page
- if(currentPage == "search") {
- if(isLoggedIn) {
- document.querySelector('.promo').remove();
- }
- else {
- document.querySelector('.promo').innerHTML = '<strong><span style="color:red">You must be logged in to use Fireteam Search!</span></strong>';
- }
- }
- // to prevent the browser from entering an endless loop of page reloads we're using a hash to see if we already reloaded
- function ReloadPage(page) {
- if(window.location.hash == page || window.location.hash == null) return;
- location.href = "https://www.bungie.net/en/ClanV2/FireteamSearch?platform=" +
- platformSelect[platformSelect.selectedIndex].value +
- "&activityType=" +
- activitySelect[activitySelect.selectedIndex].value +
- "&lang=" + languageSelect[languageSelect.selectedIndex].value +
- "#" +
- page;
- }
- // reroute dropdowns to our own function so the userscript still works after using the select boxes
- // only needed on Fireteam search page
- if(currentPage == "search") {
- platformSelect.onchange = (e) => {
- e.preventDefault();
- e.stopPropagation();
- ReloadPage("platform");
- }
- activitySelect.onchange = (e) => {
- e.preventDefault();
- e.stopPropagation();
- ReloadPage("activity");
- }
- languageSelect.onchange = (e) => {
- e.preventDefault();
- e.stopPropagation();
- ReloadPage("language");
- }
- }
- // add textual description of the activity
- // so people who can't remember dozens of icons can actually understand what's going on
- if(currentPage == "search") {
- // Fireteam search page
- var lis = document.getElementById('clansList').querySelectorAll('li');
- lis.forEach((item, index) => {
- var activityId = item.querySelector('.activity-icon').getAttribute('data-activity');
- var title = item.querySelector('.title');
- // removes the post if it's spam or a clan ad
- if(spamStrings.test(title.innerHTML.toLowerCase()) || clanAdverts.test(title.innerHTML.toLowerCase())) {
- item.remove();
- return;
- }
- // remove the original post title if it was left blank (which is then replaced by Bungie with the same info we already added)
- var newTitle = (activities[activityId] != null ? activities[activityId] : "N/A");
- if(!defaultTitle.test(title.innerHTML)) {
- newTitle += " | " + title.innerHTML;
- }
- title.innerHTML = newTitle;
- });
- }
- else if(currentPage == "fireteam")
- {
- // Fireteam page
- var activityId = document.querySelector('span[class=activity-icon]').getAttribute('data-activity');
- var title = document.querySelector('h2[class=section-header]');
- // remove the original title if it was left blank (which is then replaced by Bungie with the same info we already added)
- var newTitle = (activities[activityId] != null ? activities[activityId] : "N/A");
- if(!defaultTitle.test(title.innerHTML)) {
- newTitle += " | " + title.innerHTML;
- }
- // for the sake of consistency let's also change the window title accordingly
- title.innerHTML = newTitle;
- document.title = newTitle + " | Bungie.net";
- }
- })();