You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.7 KiB

var userID;
window.onload = async () =>
{
const fragment = new URLSearchParams(window.location.hash.slice(1));
const [accessToken, tokenType] = [fragment.get('access_token'), fragment.get('token_type')];
var guilds;
const avatar = document.getElementById('avatar');
const userName = document.getElementById('userName');
var table = document.getElementById('guilds')
if (!accessToken) return window.location.href = '/';
fetch('https://discord.com/api/users/@me',
{
headers: {
authorization: `${tokenType} ${accessToken}`,
},
})
.then(result => result.json())
.then(response =>
{
userID = response.id;
avatar.style.backgroundImage = `url(https://cdn.discordapp.com/avatars/${response.id}/${response.avatar}.jpeg)`
userName.textContent = response.username
})
.catch(console.error);
fetch('https://discord.com/api/users/@me/guilds',
{
headers: {
authorization: `${tokenType} ${accessToken}`,
},
})
.then(result => result.json())
.then(response =>
{
guilds = response.filter(x=>x.owner==true);
for(var guild of guilds)
{
(async (guild)=>
{
var row = document.createElement('tr');
var name = document.createElement('td');
name.textContent = guild.name;
var settings = document.createElement('td');
settings.id = guild.id;
var gear = document.createElement('span');
gear.classList.add('material-symbols-outlined')
gear.onclick = handleSettigns
gear.textContent = 'settings';
row.appendChild(name);
var addRemData = document.createElement('td');
if(!await hasRem(guild.id))
{
var button = document.createElement('div');
button.classList.add('DiscordAddBtn');
addRemData.appendChild(button);
}
row.appendChild(addRemData);
settings.appendChild(gear);
row.appendChild(settings);
table.appendChild(row)
})(guild)
}
})
.catch(console.error);
};
function handleSettigns(event)
{
var guildID = event.target.parentNode.id;
var guildName = event.target.parentNode.parentNode.childNodes[0].textContent;
var popup = document.getElementById('popup');
const data = {guildID}
fetch(`${window.location.origin}/api/getGuildData`,
{
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data), // body data type must match "Content-Type" header
})
.then(result => result.json())
.then(res =>
{
popup.classList.remove('hidden');
popup.children[1].textContent = guildName;
popup.children[1].id = guildID;
let music = document.getElementById('music')
music.textContent = res.music? 'check_box' :'check_box_outline_blank';
let strikes = document.getElementById('strikes')
strikes.textContent = res.strikes? 'check_box' :'check_box_outline_blank';
music.onclick = requestChange;
strikes.onclick = requestChange;
})
.catch(console.error);
}
async function hasRem(guildID)
{
return await fetch(`${window.location.origin}/api/hasRem`,
{
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({guildID}), // body data type must match "Content-Type" header
})
.then(result => result.json())
.then(res =>
{
return res.hasRem;
})
.catch(console.error);
}
function handleClose(element)
{
element.parentNode.classList.add('hidden');
}
async function requestChange()
{
return await fetch(`${window.location.origin}/api/change`,
{
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({guildID:event.target.parentNode.parentNode.children[1].id,userID, property:event.target.id}), // body data type must match "Content-Type" header
})
.then(result => result.json())
.then(res =>
{
if(!res.error)
{
let music = document.getElementById('music')
music.textContent = res.music? 'check_box' :'check_box_outline_blank';
let strikes = document.getElementById('strikes')
strikes.textContent = res.strikes? 'check_box' :'check_box_outline_blank';
}
})
.catch(console.error);
}