이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @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);
}
});
},
};