allie test

tab

Version vom 08.06.2025. Aktuellste Version

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.ip-ddns.com/scripts/538683/1603824/allie%20test.js

// Add this to your existing tabs
Tabs.Chat = {
    tabOrder: 900,
    tabLabel: 'Chat',
    tabDisabled: false,
    myDiv: null,
    timer: null,
    chatMessages: [],
    lastFetchTime: 0,

    init: function(div){
        var t = Tabs.Chat;
        t.myDiv = div;
        t.createMainDiv();
        t.startFetchingChat();
    },

    createMainDiv: function(){
        var t = Tabs.Chat;
        var m = '<DIV class=divHeader align=center>'+tx('CHAT')+'</div>';
        
        m += '<div id="ChatContent" style="height:450px; max-height:450px; overflow-y:auto;">';
        m += '<table width="100%">';
        m += '<tr><td><INPUT id=btChatEnabled type=checkbox '+ (Options.ChatOptions.Enabled?' CHECKED':'') +'> '+tx('Enable Chat')+'</td>';
        m += '<td>'+tx('Refresh Interval')+': <INPUT id=btChatInterval type=text size=3 value="'+ Options.ChatOptions.Interval +'"> '+tx('seconds')+'</td></tr>';
        m += '</table>';
        m += '<div id="ChatMessages"></div>';
        m += '</div>';
        
        // Add chat input and send button
        m += '<div id="ChatInputArea" style="margin-top:10px;">';
        m += '<input type="text" id="ChatInput" style="width:80%;" placeholder="Type your message here...">';
        m += '<button id="ChatSendButton" style="width:18%; margin-left:2%;">Send</button>';
        m += '</div>';

        t.myDiv.innerHTML = m;
        
        ById('btChatEnabled').addEventListener('change', function(){
            Options.ChatOptions.Enabled = this.checked;
            saveOptions();
            t.toggleChat();
        }, false);
        
        ById('btChatInterval').addEventListener('change', function(){
            Options.ChatOptions.Interval = parseInt(this.value);
            saveOptions();
            t.restartTimer();
        }, false);

        // Add event listener for send button
        ById('ChatSendButton').addEventListener('click', t.sendChat, false);
        
        // Add event listener for Enter key in input field
        ById('ChatInput').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                t.sendChat();
            }
        }, false);

        t.toggleChat();
    },

    toggleChat: function(){
        var t = Tabs.Chat;
        if(Options.ChatOptions.Enabled){
            t.startFetchingChat();
        } else {
            t.stopFetchingChat();
        }
    },

    startFetchingChat: function(){
        var t = Tabs.Chat;
        if(t.timer == null){
            t.timer = setInterval(t.fetchChat, Options.ChatOptions.Interval * 1000);
            t.fetchChat(); // Fetch immediately
        }
    },

    stopFetchingChat: function(){
        var t = Tabs.Chat;
        if(t.timer != null){
            clearInterval(t.timer);
            t.timer = null;
        }
    },

    restartTimer: function(){
        var t = Tabs.Chat;
        t.stopFetchingChat();
        t.startFetchingChat();
    },

    fetchChat: function(){
        var t = Tabs.Chat;
        var url = 'https://rycamelot.com/fb/e2/src/ajax/getChat.php';
        
        GM_xmlhttpRequest({
            method: 'GET',
            url: url,
            onload: function(response) {
                if (response.status === 200) {
                    t.processChat(response.responseText);
                } else {
                    console.error('Failed to fetch chat:', response.status, response.statusText);
                }
            },
            onerror: function(error) {
                console.error('Error fetching chat:', error);
            }
        });
    },

    processChat: function(responseText){
        var t = Tabs.Chat;
        var chatData;
        try {
            chatData = JSON.parse(responseText);
        } catch (e) {
            console.error('Error parsing chat data:', e);
            return;
        }

        // Assuming the chat data is an array of messages
        chatData.forEach(function(message) {
            if (message.time > t.lastFetchTime) {
                t.chatMessages.push(message);
                t.lastFetchTime = message.time;
            }
        });

        // Keep only the last 100 messages
        if (t.chatMessages.length > 100) {
            t.chatMessages = t.chatMessages.slice(-100);
        }

        t.displayChat();
    },

    displayChat: function(){
        var t = Tabs.Chat;
        var chatDiv = ById('ChatMessages');
        var html = '';

        t.chatMessages.forEach(function(message) {
            html += '<div class="chatMessage">';
            html += '<span class="chatTime">[' + new Date(message.time * 1000).toLocaleTimeString() + ']</span> ';
            html += '<span class="chatUser">' + message.user + ':</span> ';
            html += '<span class="chatText">' + message.text + '</span>';
            html += '</div>';
        });

        chatDiv.innerHTML = html;
        t.scrollToBottom();
    },

    scrollToBottom: function() {
        var chatDiv = ById('ChatMessages');
        chatDiv.scrollTop = chatDiv.scrollHeight;
    },

    sendChat: function() {
        var t = Tabs.Chat;
        var chatInput = ById('ChatInput');
        var message = chatInput.value.trim();
        
        if (message === '') return; // Don't send empty messages
        
        var url = 'https://rycamelot.com/fb/e2/src/ajax/sendChat.php'; // You'll need to confirm the correct URL
        
        GM_xmlhttpRequest({
            method: 'POST',
            url: url,
            data: 'message=' + encodeURIComponent(message),
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            onload: function(response) {
                if (response.status === 200) {
                    // Message sent successfully
                    chatInput.value = ''; // Clear input field
                    t.fetchChat(); // Fetch latest messages including the one just sent
                } else {
                    console.error('Failed to send chat:', response.status, response.statusText);
                }
            },
            onerror: function(error) {
                console.error('Error sending chat:', error);
            }
        });
    },
};