mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
Add pagination to !cases -mod
This commit is contained in:
parent
0c6ec9cef0
commit
5056b4376a
5 changed files with 87 additions and 31 deletions
|
@ -1,18 +1,21 @@
|
|||
import { modActionsCmd } from "../types";
|
||||
import { commandTypeHelpers as ct } from "../../../commandTypes";
|
||||
import { sendErrorMessage } from "../../../pluginUtils";
|
||||
import { trimLines, createChunkedMessage, emptyEmbedValue, sorter } from "../../../utils";
|
||||
import { trimLines, createChunkedMessage, emptyEmbedValue, sorter, resolveUser } from "../../../utils";
|
||||
import { CasesPlugin } from "../../Cases/CasesPlugin";
|
||||
import { asyncMap } from "../../../utils/async";
|
||||
import { EmbedOptions } from "eris";
|
||||
import { EmbedOptions, User } from "eris";
|
||||
import { getChunkedEmbedFields } from "../../../utils/getChunkedEmbedFields";
|
||||
import { getDefaultPrefix } from "knub/dist/commands/commandUtils";
|
||||
import { getGuildPrefix } from "../../../utils/getGuildPrefix";
|
||||
import { createPaginatedMessage } from "../../../utils/createPaginatedMessage";
|
||||
|
||||
const opts = {
|
||||
mod: ct.resolvedMember({ option: true }),
|
||||
mod: ct.userId({ option: true }),
|
||||
};
|
||||
|
||||
const casesPerPage = 5;
|
||||
|
||||
export const CasesModCmd = modActionsCmd({
|
||||
trigger: ["cases", "modlogs"],
|
||||
permission: "can_view",
|
||||
|
@ -25,36 +28,55 @@ export const CasesModCmd = modActionsCmd({
|
|||
],
|
||||
|
||||
async run({ pluginData, message: msg, args }) {
|
||||
const modId = args.mod ? args.mod.id : msg.author.id;
|
||||
const recentCases = await pluginData.state.cases.with("notes").getRecentByModId(modId, 5);
|
||||
recentCases.sort(sorter("case_number", "ASC"));
|
||||
const modId = args.mod || msg.author.id;
|
||||
const mod = await resolveUser(pluginData.client, modId);
|
||||
const modName = mod instanceof User ? `${mod.username}#${mod.discriminator}` : modId;
|
||||
|
||||
const mod = pluginData.client.users.get(modId);
|
||||
const modName = mod ? `${mod.username}#${mod.discriminator}` : modId;
|
||||
const casesPlugin = pluginData.getPlugin(CasesPlugin);
|
||||
const totalCases = await casesPlugin.getTotalCasesByMod(modId);
|
||||
|
||||
if (recentCases.length === 0) {
|
||||
if (totalCases === 0) {
|
||||
sendErrorMessage(pluginData, msg.channel, `No cases by **${modName}**`);
|
||||
} else {
|
||||
const casesPlugin = pluginData.getPlugin(CasesPlugin);
|
||||
const lines = await asyncMap(recentCases, c => casesPlugin.getCaseSummary(c, true, msg.author.id));
|
||||
const prefix = getGuildPrefix(pluginData);
|
||||
const embed: EmbedOptions = {
|
||||
author: {
|
||||
name: `Most recent 5 cases by ${modName}`,
|
||||
icon_url: mod ? mod.avatarURL || mod.defaultAvatarURL : undefined,
|
||||
},
|
||||
fields: [
|
||||
...getChunkedEmbedFields(emptyEmbedValue, lines.join("\n")),
|
||||
{
|
||||
name: emptyEmbedValue,
|
||||
value: trimLines(`
|
||||
Use \`${prefix}case <num>\` to see more information about an individual case
|
||||
Use \`${prefix}cases <user>\` to see a specific user's cases
|
||||
`),
|
||||
},
|
||||
],
|
||||
};
|
||||
msg.channel.createMessage({ embed });
|
||||
return;
|
||||
}
|
||||
|
||||
const totalPages = Math.max(Math.ceil(totalCases / casesPerPage), 1);
|
||||
const prefix = getGuildPrefix(pluginData);
|
||||
|
||||
createPaginatedMessage(
|
||||
pluginData.client,
|
||||
msg.channel,
|
||||
totalPages,
|
||||
async page => {
|
||||
const cases = await casesPlugin.getRecentCasesByMod(modId, casesPerPage, (page - 1) * casesPerPage);
|
||||
const lines = await asyncMap(cases, c => casesPlugin.getCaseSummary(c, true, msg.author.id));
|
||||
|
||||
const firstCaseNum = (page - 1) * casesPerPage + 1;
|
||||
const lastCaseNum = page * casesPerPage;
|
||||
const title = `Most recent cases ${firstCaseNum}-${lastCaseNum} of ${totalCases} by ${modName}`;
|
||||
|
||||
const embed: EmbedOptions = {
|
||||
author: {
|
||||
name: title,
|
||||
icon_url: mod instanceof User ? mod.avatarURL || mod.defaultAvatarURL : undefined,
|
||||
},
|
||||
fields: [
|
||||
...getChunkedEmbedFields(emptyEmbedValue, lines.join("\n")),
|
||||
{
|
||||
name: emptyEmbedValue,
|
||||
value: trimLines(`
|
||||
Use \`${prefix}case <num>\` to see more information about an individual case
|
||||
Use \`${prefix}cases <user>\` to see a specific user's cases
|
||||
`),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return { embed };
|
||||
},
|
||||
{
|
||||
limitToUserId: msg.author.id,
|
||||
},
|
||||
);
|
||||
},
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue