rate limit handling for generate channels
All checks were successful
Build and Push Docker Image / build (push) Successful in 14s

This commit is contained in:
Corban-Lee Jones 2024-10-12 19:00:53 +01:00
parent 56e125c0bf
commit 082cf2989d

View File

@ -58,6 +58,63 @@ function loadedChannels(serverId) {
return _loadedChannels[serverId]
}
const rateLimitedLoadingChannels = retryAfterSeconds => {
createModal({
title: "Failed to Fetch Server Channels",
texts: [
{ content: "Discord is rate-limiting your request." },
{ content: `This happens when making requests too quickly. Retry after ${retryAfterSeconds} seconds to continue without issue.` }
],
buttons: [
{
className: "btn-warning px-4",
iconClass: "bi-arrow-return-right",
closeModal: true
}
]
});
}
const notAuthorisedLoadingChannels = () => {
// Mark the sidebar item as non-operational
$(`.sidebar .sidebar-item[data-id="${serverId}"]`).addClass("is-not-operational");
const inviteBotToServer = () => {
window.open(
`https://discord.com/oauth2/authorize
?client_id=${discordClientId}
&permissions=2147534848
&scope=bot+applications.commands
&guild_id=${serverId}
&disable_guild_select=true`,
"_blank"
);
}
// Inform the user auth problem
createModal({
title: "Failed to Fetch Server Channels",
texts: [
{ content: "The Discord Bot is unable to access this server's channels, certain features will not work." },
{ content: "Ensure the Bot is a member, and has the neccessary permissions to operate." }
],
buttons: [
{
text: "Invite the Bot",
className: "btn-primary me-3",
iconClass: "bi-envelope-plus",
closeModal: true,
onClick: inviteBotToServer
},
{
className: "btn-secondary",
iconClass: "bi-arrow-return-right",
closeModal: true
}
]
});
}
$(document).on("selectedServerChange", async function() {
serverId = selectedServer.id; // take note incase 'selectedServer' changes
@ -71,43 +128,20 @@ $(document).on("selectedServerChange", async function() {
catch (error) {
logError(error);
// Mark the sidebar item as non-operational
$(`.sidebar .sidebar-item[data-id="${serverId}"]`).addClass("is-not-operational");
switch (error?.status) {
case 429:
rateLimitedLoadingChannels(error.responseJSON.retry_after);
break;
const inviteBotToServer = () => {
window.open(
`https://discord.com/oauth2/authorize
?client_id=${discordClientId}
&permissions=2147534848
&scope=bot+applications.commands
&guild_id=${serverId}
&disable_guild_select=true`,
"_blank"
);
case 403:
notAuthorisedLoadingChannels();
break;
default:
alert("unknown error loading channels");
break;
}
// Inform the user of the problem
createModal({
title: "Failed to Fetch Server Channels",
texts: [
{ content: "The Discord Bot is unable to access this server's channels, certain features will not work." },
{ content: "Ensure the Bot is a member, and has the neccessary permissions to operate." }
],
buttons: [
{
text: "Invite the Bot",
className: "btn-primary me-3",
iconClass: "bi-envelope-plus",
closeModal: true,
onClick: inviteBotToServer
},
{
className: "btn-secondary",
iconClass: "bi-arrow-return-right",
closeModal: true
}
]
});
}
finally {
$(".sidebar .sidebar-item").prop("disabled", false);
@ -237,7 +271,7 @@ async function loadServers() {
$(".sidebar .server-rate-limit").hide();
try {
const servers = await generateServers();
const servers = await ajaxRequest("/generate-servers/", "GET");
servers.forEach(server => addToLoadedServers(server, false));
}
catch (error) {