84 lines
3.4 KiB
JavaScript
84 lines
3.4 KiB
JavaScript
|
let colour;
|
||
|
|
||
|
window.onload = () => {
|
||
|
colour = new URLSearchParams(window.location.search).get('colour');
|
||
|
if (!colour) {
|
||
|
alert(`The 'colour' query parameter was not provided; cannot proceed!`);
|
||
|
document.getElementById('setup').hidden = true;
|
||
|
const statusText = document.getElementById('status');
|
||
|
statusText.innerText = `The 'colour' query parameter was not provided; cannot proceed!`;
|
||
|
}
|
||
|
colour = decodeURIComponent(colour);
|
||
|
}
|
||
|
|
||
|
function login() {
|
||
|
const statusText = document.getElementById('status');
|
||
|
const token = document.getElementById('token').value;
|
||
|
document.getElementById('setup').hidden = true;
|
||
|
statusText.innerText = 'Connecting...';
|
||
|
|
||
|
const socket = new WebSocket(`wss://ws.revolt.chat?version=1&token=${token}`);
|
||
|
let success = false;
|
||
|
socket.onmessage = (event) => {
|
||
|
const data = JSON.parse(event.data);
|
||
|
console.log('<', data);
|
||
|
if (data.type == "Ready") {
|
||
|
success = true;
|
||
|
const servers = data.servers;
|
||
|
socket.close();
|
||
|
|
||
|
statusText.innerText = `Received ${servers.length} servers!`;
|
||
|
|
||
|
const serverList = document.getElementById('servers');
|
||
|
for (const server of servers) {
|
||
|
const title = document.createElement('h3');
|
||
|
title.innerText = server.name;
|
||
|
serverList.appendChild(title);
|
||
|
|
||
|
const roleDiv = document.createElement('div');
|
||
|
serverList.appendChild(roleDiv);
|
||
|
|
||
|
for (const role of Object.entries(server.roles)) {
|
||
|
const roleButton = document.createElement('button');
|
||
|
roleButton.innerText = role[1].name;
|
||
|
roleDiv.appendChild(roleButton);
|
||
|
roleDiv.appendChild(document.createElement('br'));
|
||
|
|
||
|
roleButton.onclick = async () => {
|
||
|
const response = confirm(`If your bot has access to it, this will update the color of the role "${role[1].name}" (${role[0]}) in the server "${server.name}" to your new gradient. Are you sure you want to continue?\n\nThe current color of this role is: ${role[1].colour}`);
|
||
|
if (!response) return;
|
||
|
|
||
|
try {
|
||
|
const res = await fetch(
|
||
|
`https://api.revolt.chat/servers/${server._id}/roles/${role[0]}`,
|
||
|
{
|
||
|
method: 'PATCH',
|
||
|
headers: {
|
||
|
"X-Bot-Token": token,
|
||
|
"Content-Type": 'application/json',
|
||
|
},
|
||
|
body: JSON.stringify({
|
||
|
colour: colour,
|
||
|
}, null, 4),
|
||
|
}
|
||
|
);
|
||
|
console.log(res);
|
||
|
alert(`Response: ${res.status} - ${res.statusText}`);
|
||
|
} catch(e) {
|
||
|
console.log(e);
|
||
|
alert('Error: ' + e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
socket.onclose = (event) => {
|
||
|
if (!success) {
|
||
|
statusText.innerText = `Disconnected - ${event.code}`;
|
||
|
document.getElementById('setup').hidden = false;
|
||
|
}
|
||
|
}
|
||
|
}
|