dashboard/public/templates/views/whitelabel.tmpl
2020-06-18 15:11:51 +01:00

276 lines
9.3 KiB
Cheetah

{{define "content"}}
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title">Bot Token</h4>
</div>
<div class="card-body" id="card">
<form onsubmit="updateSettings(); return false;">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Bot Token</label>
<input name="token" type="text" class="form-control"
placeholder="9ViiGeUZlFJKIfSzodnzZT6W.bX8IAh.p9gG0tElMXg1EqwAChqaYz3swFY" id="token">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<p class="white">Note: You will not be able to view the token after submitting it</p>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
<button class="btn btn-primary btn-fill" type="submit">
<i class="fas fa-paper-plane"></i>
Submit
</button>
</div>
</div>
<div class="col-md-4">
<button class="btn btn-primary btn-fill" id="invite" type="button">
<i class="fas fa-plus"></i>
Generate Invite Link
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title">Modmail</h4>
</div>
<div class="card-body" id="card">
<form onsubmit="updateForcedModmail(); return false;">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Server</label>
<select class="form-control" id="forced_modmail">
<option value="0">Allow user to select</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
<button class="btn btn-primary btn-fill" type="submit">
<i class="fas fa-paper-plane"></i>
Submit
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title">Custom Status</h4>
</div>
<div class="card-body" id="card">
<form onsubmit="updateStatus(); return false;">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Status</label>
<input name="status" type="text" class="form-control" placeholder="DM for help | t!help"
id="status">
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
<button class="btn btn-primary btn-fill" type="submit">
<i class="fas fa-paper-plane"></i>
Submit
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title">Error Logs</h4>
</div>
<div class="card-body" id="card">
<table class="table">
<thead>
<tr>
<th scope="col" span="2">Error</th>
<th scope="col">Date</th>
</tr>
</thead>
<tbody id="error_body">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div aria-live="polite" aria-atomic="true" style="position: relative">
<div style="position: absolute; right: 10px" id="toast-container">
</div>
</div>
<script>
// invite button
document.getElementById('invite').addEventListener('click', async () => {
// get bot ID
const res = await axios.get('/user/whitelabel');
if (res.status !== 200 || !res.data.success) {
showToast('Error', res.data.error);
return;
}
const inviteUrl = 'https://discord.com/oauth2/authorize?client_id=' + res.data.id + '&scope=bot&permissions=805825648';
window.open(inviteUrl, '_blank');
}, false);
</script>
<script>
async function updateSettings() {
const data = {
token: document.getElementById('token').value
};
const res = await axios.post('/user/whitelabel', data);
if (res.status !== 200 || !res.data.success) {
showToast('Error', res.data.error);
return;
}
showToast('Success', `Started tickets whitelabel on ${res.data.bot.username}#${res.data.bot.discriminator}`);
}
async function updateForcedModmail() {
const select = document.getElementById('forced_modmail');
const data = {
guild: select.options[select.selectedIndex].value
};
const res = await axios.post('/user/whitelabel/modmail', data);
if (res.status !== 200 || !res.data.success) {
showToast('Error', res.data.error);
return;
}
showToast('Success', 'Updated modmail settings successfully')
}
async function updateStatus() {
const data = {
status: document.getElementById('status').value
};
const res = await axios.post('/user/whitelabel/status', data);
if (res.status !== 200 || !res.data.success) {
showToast('Error', res.data.error);
return;
}
showToast('Success', 'Updated status successfully')
}
async function loadStatus() {
const res = await axios.get('/user/whitelabel');
if (res.status !== 200 || !res.data.success) {
if (res.status !== 404) {
showToast('Error', res.data.error);
}
return;
}
// set status
document.getElementById('status').value = res.data.status;
}
async function loadErrors() {
const res = await axios.get('/user/whitelabel/errors');
if (res.status !== 200 || !res.data.success) {
showToast('Error', res.data.error);
return;
}
// append errors
for (error of res.data.errors) {
const message = error.Message;
const time = new Date(error.Time);
const tr = document.createElement('tr');
appendTd(tr, message);
appendTd(tr, time.toDateString());
document.getElementById('error_body').appendChild(tr);
}
}
async function loadGuilds() {
// get selected guild
const settingsRes = await axios.get('/user/whitelabel');
if (settingsRes.status !== 200 || !settingsRes.data.success) {
showToast('Error', settingsRes.data.error);
return;
}
const guildId = settingsRes.data.modmail_forced_guild;
// get guild list
const guildsRes = await axios.get('/user/whitelabel/guilds');
if (guildsRes.status !== 200 || !guildsRes.data.success) {
if (guildsRes.status !== 404) {
showToast('Error', guildsRes.data.error);
}
return;
}
// append guilds to dropdown
const select = document.getElementById('forced_modmail');
for (let [id, name] of Object.entries(guildsRes.data.guilds)) {
const option = document.createElement('option');
option.value = id;
option.text = name;
if (id === guildId) {
option.selected = true;
}
select.add(option);
}
}
withLoadingScreen(() => {
loadStatus();
loadErrors();
loadGuilds();
});
</script>
{{end}}