Hunger Games Teams

Script to add teams to ice poseidons hunger games map

// ==UserScript==
// @name         Hunger Games Teams
// @namespace    Keir
// @version      1.1
// @description  Script to add teams to ice poseidons hunger games map
// @author       KeirStarmer
// @match        https://map.iceposeidon.com/
// @match        https://hungergames.iceposeidon.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=iceposeidon.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const jsonURL = 'https://cxwatcher.github.io/teams.json';
    fetch(jsonURL)
        .then(response => response.json())
        .then(teamColors => {
            const teams = {};
            for (const [username, color] of Object.entries(teamColors)) {
                if (!teams[color]) {
                    teams[color] = [];
                }
                teams[color].push(username);
            }
            function changeUserBoxColor() {
                const usernames = document.querySelectorAll('.username');
                usernames.forEach(function(username) {
                    const name = username.textContent.trim();
                    if (teamColors[name]) {
                        username.closest('.user-marker-inner').style.backgroundColor = teamColors[name];
                    }
                });
            }

            window.addEventListener('load', changeUserBoxColor);
            new MutationObserver(changeUserBoxColor).observe(document.body, {childList: true, subtree: true});

            const gulagDiv = document.querySelector('.gulag');
            if (gulagDiv) {
                const buttonContainer = document.createElement('div');
                buttonContainer.style.marginTop = '10px';
                const buttonState = {};
                for (const [color, members] of Object.entries(teams)) {
                    const teamButton = document.createElement('button');
                    teamButton.textContent = `${color.charAt(0).toUpperCase() + color.slice(1)} Team`;
                    teamButton.style.margin = '5px';
                    teamButton.style.backgroundColor = color;
                    teamButton.style.color = color === 'yellow' || color === 'white' ? 'black' : 'white';
                    teamButton.style.border = 'none';
                    teamButton.style.padding = '5px';
                    teamButton.style.borderRadius = '5px';
                    teamButton.style.display = 'block';

                    buttonContainer.appendChild(teamButton);

                    buttonState[color] = false;

                    teamButton.addEventListener('click', () => {
                        const usernames = document.querySelectorAll('.username');
                        if (!buttonState[color]) {
                            usernames.forEach(function(username) {
                                const name = username.textContent.trim();
                                if (teamColors[name] === color) {
                                    username.closest('.user-marker-inner').style.display = 'block';
                                } else {
                                    username.closest('.user-marker-inner').style.display = 'none';
                                }
                            });
                            buttonState[color] = true;
                        } else {
                            usernames.forEach(function(username) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            });
                            buttonState[color] = false;
                        }
                    });
                }
                gulagDiv.insertAdjacentElement('afterend', buttonContainer);
            }

            // Insert data list to the bottom left
            const dataListContainer = document.createElement('div');
            dataListContainer.style.position = 'fixed';
            dataListContainer.style.bottom = '10px';
            dataListContainer.style.left = '10px';
            dataListContainer.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
            dataListContainer.style.color = 'white';
            dataListContainer.style.padding = '10px';
            dataListContainer.style.borderRadius = '5px';
            dataListContainer.style.zIndex = '1000';
            dataListContainer.style.maxHeight = '80vh';
            dataListContainer.style.overflowY = 'auto';

            const dataList = document.createElement('ul');
            dataList.id = 'data-list';
            dataList.style.listStyleType = 'none';
            dataList.style.padding = '0';
            dataList.style.margin = '0';

            dataListContainer.appendChild(dataList);
            document.body.appendChild(dataListContainer);

           const toggledUsers = {};
function updateList() {
    fetch('https://appapi.iceposeidon.com/public')
        .then(response => response.json())
        .then(data => {
            const sortedData = data.sort((a, b) => a.lives_remaining - b.lives_remaining);
            const list = document.getElementById('data-list');
            list.innerHTML = '';

            sortedData.forEach(entry => {
                const listItem = document.createElement('li');
                const link = document.createElement('a');
                link.href = `https://kick.com/${entry.name}`;
                link.textContent = entry.name;
                link.target = '_blank';
                const livesText = document.createTextNode(` - ${entry.lives_remaining}`);
                listItem.appendChild(link);
                listItem.appendChild(livesText);
                list.appendChild(listItem);
                const nameLower = entry.name.toLowerCase();
                listItem.addEventListener('mouseover', () => {
                    if (Object.keys(toggledUsers).length === 0) {
                        const usernames = document.querySelectorAll('.username');
                        usernames.forEach(function (username) {
                            const name = username.textContent.trim().toLowerCase();
                            if (name === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            } else {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });
                    }
                });

                listItem.addEventListener('mouseout', () => {
                    if (Object.keys(toggledUsers).length === 0) {
                        const usernames = document.querySelectorAll('.username');
                        usernames.forEach(function (username) {
                            username.closest('.user-marker-inner').style.display = 'block';
                        });
                    }
                });
                listItem.addEventListener('click', () => {
                    const usernames = document.querySelectorAll('.username');

                    if (toggledUsers[nameLower]) {
                        usernames.forEach(function (username) {
                            if (username.textContent.trim().toLowerCase() === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });
                        listItem.style.backgroundColor = '';
                        delete toggledUsers[nameLower];
                    } else {
                        usernames.forEach(function (username) {
                            if (username.textContent.trim().toLowerCase() === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            } else if (!toggledUsers[username.textContent.trim().toLowerCase()]) {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });

                        listItem.style.backgroundColor = 'green';
                        toggledUsers[nameLower] = true;
                    }
                    usernames.forEach(function (username) {
                        const name = username.textContent.trim().toLowerCase();
                        if (toggledUsers[name]) {
                            username.closest('.user-marker-inner').style.display = 'block';
                        }
                    });
                });

                if (toggledUsers[nameLower]) {
                    listItem.style.backgroundColor = 'green';
                }
            });

            const usernames = document.querySelectorAll('.username');
            usernames.forEach(function (username) {
                const nameLower = username.textContent.trim().toLowerCase();
                if (toggledUsers[nameLower]) {
                    username.closest('.user-marker-inner').style.display = 'block';
                }
            });
        })
        .catch(error => console.error('Error fetching data:', error));
}

            updateList();
            setInterval(updateList, 10000);

        })
        .catch(error => console.error('Error fetching team colors:', error));
})();