3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-13 21:35:02 +00:00

Added slash command deferral to avoid timeouts

This commit is contained in:
Lily Bergonzat 2024-02-26 22:05:25 +01:00
parent ee861bb5e9
commit 408f1b9c30
22 changed files with 32 additions and 3 deletions

View file

@ -86,7 +86,13 @@ export async function sendContextResponse(
if (isContextInteraction(context)) { if (isContextInteraction(context)) {
const options = { ...(typeof response === "string" ? { content: response } : response), fetchReply: true }; const options = { ...(typeof response === "string" ? { content: response } : response), fetchReply: true };
return (context.replied ? context.followUp(options) : context.reply(options)) as Promise<Message>; return (
context.replied
? context.followUp(options)
: context.deferred
? context.editReply(options)
: context.reply(options)
) as Promise<Message>;
} }
if (typeof response !== "string" && "ephemeral" in response) { if (typeof response !== "string" && "ephemeral" in response) {

View file

@ -76,7 +76,7 @@ export const CommonPlugin = zeppelinGuildPlugin<CommonPluginType>()({
}); });
} }
const replyMethod = context.replied ? "editReply" : "reply"; const replyMethod = context.replied || context.deferred ? "editReply" : "reply";
return context[replyMethod]({ return context[replyMethod]({
content: formattedBody, content: formattedBody,
@ -127,7 +127,7 @@ export const CommonPlugin = zeppelinGuildPlugin<CommonPluginType>()({
}); });
} }
const replyMethod = context.replied ? "editReply" : "reply"; const replyMethod = context.replied || context.deferred ? "editReply" : "reply";
return context[replyMethod]({ return context[replyMethod]({
content: formattedBody, content: formattedBody,

View file

@ -34,6 +34,7 @@ export const AddCaseSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
// The moderator who did the action is the message author or, if used, the specified -mod // The moderator who did the action is the message author or, if used, the specified -mod

View file

@ -47,6 +47,7 @@ export const BanSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to ban", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to ban", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -18,6 +18,7 @@ export const CaseSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
actualCaseCmd(pluginData, interaction, interaction.user.id, options["case-number"], options.show); actualCaseCmd(pluginData, interaction, interaction.user.id, options["case-number"], options.show);
}, },
}; };

View file

@ -30,6 +30,8 @@ export const CasesSlashCmd = {
signature: [...opts], signature: [...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
return actualCasesCmd( return actualCasesCmd(
pluginData, pluginData,
interaction, interaction,

View file

@ -16,6 +16,8 @@ export const DeleteCaseSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
actualDeleteCaseCmd( actualDeleteCaseCmd(
pluginData, pluginData,
interaction, interaction,

View file

@ -24,6 +24,7 @@ export const ForceBanSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to ban", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to ban", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -42,6 +42,7 @@ export const ForceMuteSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to mute", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to mute", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -25,6 +25,7 @@ export const ForceUnmuteSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to unmute", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to unmute", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -12,6 +12,7 @@ export const HideCaseSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
actualHideCaseCmd(pluginData, interaction, options["case-number"].split(/[\s,]+/).map(Number)); actualHideCaseCmd(pluginData, interaction, options["case-number"].split(/[\s,]+/).map(Number));
}, },
}; };

View file

@ -46,6 +46,7 @@ export const KickSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to kick", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to kick", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -25,6 +25,7 @@ export const MassBanSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -25,6 +25,7 @@ export const MassMuteSlashSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -25,6 +25,7 @@ export const MassUnbanSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -44,6 +44,7 @@ export const MuteSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to mute", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to mute", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
const memberToMute = await resolveMember(pluginData.client, pluginData.guild, options.user.id); const memberToMute = await resolveMember(pluginData.client, pluginData.guild, options.user.id);

View file

@ -21,6 +21,7 @@ export const NoteSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to add a note to", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to add a note to", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.note || options.note.trim() === "") && attachments.length < 1) { if ((!options.note || options.note.trim() === "") && attachments.length < 1) {

View file

@ -23,6 +23,7 @@ export const UnbanSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to unban", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to unban", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -12,6 +12,7 @@ export const UnhideCaseSlashCmd = {
], ],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
actualUnhideCaseCmd(pluginData, interaction, options["case-number"].split(/[\s,]+/).map(Number)); actualUnhideCaseCmd(pluginData, interaction, options["case-number"].split(/[\s,]+/).map(Number));
}, },
}; };

View file

@ -28,6 +28,7 @@ export const UnmuteSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to unmute", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to unmute", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {

View file

@ -21,6 +21,8 @@ export const UpdateSlashCmd = {
signature: [...opts], signature: [...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
await updateCase( await updateCase(
pluginData, pluginData,
interaction, interaction,

View file

@ -42,6 +42,7 @@ export const WarnSlashCmd = {
signature: [slashOptions.user({ name: "user", description: "The user to warn", required: true }), ...opts], signature: [slashOptions.user({ name: "user", description: "The user to warn", required: true }), ...opts],
async run({ interaction, options, pluginData }) { async run({ interaction, options, pluginData }) {
await interaction.deferReply({ ephemeral: true });
const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment"); const attachments = retrieveMultipleOptions(NUMBER_ATTACHMENTS_CASE_CREATION, options, "attachment");
if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) { if ((!options.reason || options.reason.trim() === "") && attachments.length < 1) {