278 lines
9.4 KiB
Cheetah
278 lines
9.4 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
|
|
if (res.data.errors !== null) {
|
|
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(async () => {
|
|
await loadStatus();
|
|
await loadErrors();
|
|
await loadGuilds();
|
|
});
|
|
</script>
|
|
{{end}} |