✅ Snomy Verify | Roblox Verification Badge

A simple script that adds the Roblox verification badge to your name.

// ==UserScript==
// @name         ✅ Snomy Verify |  Roblox  Verification Badge
// @namespace    Snomy Verify
// @version      0.1
// @description  A simple script that adds the Roblox verification badge to your name.
// @author       Snomy
// @match        https://www.roblox.com/*
// @match        https://create.roblox.com/*
// @grant        GM_setValue
// @license      MIT
// ==/UserScript==

 // Funktion zum Einblenden des Popups
    function showPopup() {
        const popup = document.createElement('div');
        popup.innerHTML = `
            <div id="popup" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: white; padding: 20px; border: 2px solid black; border-radius: 10px; z-index: 10000;">
                <p>Please join the Discord to use this script</p>
                <button id="discordButton" style="display: block; width: 100px; margin: 0 auto; padding: 10px; background-color: blue; color: white; text-decoration: none; border-radius: 5px;">OK</button>
            </div>
        `;
        document.body.appendChild(popup);

        // Funktion zum Entfernen des Popups nach dem Klick auf OK und Öffnen eines neuen Tabs für Discord
        document.getElementById('discordButton').addEventListener('click', function() {
            window.open('https://discord.gg/fGmYbhZAnN', '_blank');
            document.getElementById('popup').remove();
        });
    }

    // Pop-up nach dem Laden der Seite einblenden
    window.addEventListener('load', function() {
        showPopup();
    });

class Checkmark {
    constructor(profileSelectors) {
        this.profileSelectors = profileSelectors;
        this.badgeConfig = {
            spaceCharacter: ' ',
            src: this.svgBadge,
            title: 'Verified',
            alt: 'Verified Badge',
            style: {
                width: '28px',
                height: '28px',
                marginBottom: '2px'
            }
        };
    }
 
    svgBadge = `data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 28 28' fill='none'%3E%3Cg clip-path='url(%23clip0_8_46)'%3E%3Crect x='5.88818' width='22.89' height='22.89' transform='rotate(15 5.88818 0)' fill='%230066FF'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20.543 8.7508L20.549 8.7568C21.15 9.3578 21.15 10.3318 20.549 10.9328L11.817 19.6648L7.45 15.2968C6.85 14.6958 6.85 13.7218 7.45 13.1218L7.457 13.1148C8.058 12.5138 9.031 12.5138 9.633 13.1148L11.817 15.2998L18.367 8.7508C18.968 8.1498 19.942 8.1498 20.543 8.7508Z' fill='white'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_8_46'%3E%3Crect width='28' height='28' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E`
 
    createSpaceElement() {
        let spaceElement = document.createElement('span');
        spaceElement.textContent = this.badgeConfig.spaceCharacter;
        return spaceElement;
    }
 
    createVerifiedBadge(profileElement) {
        let fontSize = parseFloat(window.getComputedStyle(profileElement).fontSize);
        let iconSize = fontSize * 0.9;
        let verifiedBadge = document.createElement('img');
        verifiedBadge.className = 'profile-verified-badge-icon';
        verifiedBadge.src = this.badgeConfig.src;
        verifiedBadge.title = this.badgeConfig.title;
        verifiedBadge.alt = this.badgeConfig.alt;
        verifiedBadge.style.width = iconSize + 'px';
        verifiedBadge.style.height = iconSize + 'px';
        return verifiedBadge;
    }
 
    appendBadgeToProfile(profileElement) {
        profileElement.style.marginBottom = this.badgeConfig.style.marginBottom;
        profileElement.appendChild(this.createSpaceElement());
        profileElement.appendChild(this.createVerifiedBadge(profileElement));
    }
 
    findAndModifyProfiles() {
        let profileNameElements = document.querySelectorAll(this.profileSelectors.join(', '));
        profileNameElements.forEach(profileElement => this.appendBadgeToProfile(profileElement));
    }
}
 
class ProfileBadgeManager {
    constructor() {
        this.checkmark = new Checkmark([
            '.profile-name',
            '.age-bracket-label-username',
            '.user-name-container',
            '.user.PrimaryName',
            '.MuiGrid-root .MuiGrid-item .css-1g4gkv0-Grid-root-userName' // Roblox Studio item
        ]);
    }
 
    init() {
        setTimeout(() => this.checkmark.findAndModifyProfiles(), 2300);
    }
}
 
(function() {
    'use strict';
    let profileBadgeManager = new ProfileBadgeManager();
    profileBadgeManager.init();
})();