Guest User

Untitled

a guest
Feb 6th, 2026
6
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. const generateContainer = async (
  2. invites: Invite[],
  3. pageIndex: number = 0,
  4. ) => {
  5. const container = new ContainerBuilder()
  6. .setAccentColor(colors.container.background)
  7. .addTextDisplayComponents((display) =>
  8. display.setContent(
  9. translate(locale, {
  10. EN: `## ${user.displayName}'s active Invites`,
  11. FR: `## Invitations actives de ${user.displayName}`,
  12. }),
  13. ),
  14. )
  15. .addSeparatorComponents((s) => s);
  16.  
  17. if (invitesPages.length === 0) {
  18. container.addTextDisplayComponents((display) =>
  19. display.setContent(
  20. translate(locale, {
  21. EN: "> *This member has no active invites.*",
  22. FR: "> *Ce membre n'a pas d'invitations actives.*",
  23. }),
  24. ),
  25. );
  26. return container;
  27. }
  28.  
  29. const inviteSelectMenu = new StringSelectMenuBuilder()
  30. .setCustomId(
  31. interactionCommandId({
  32. key: "invite-tracker:invite-info",
  33. type: "select",
  34. valueName: "inviteCode",
  35. ephemeral: true,
  36. action: "reply",
  37. }),
  38. )
  39. .setPlaceholder(
  40. translate(locale, {
  41. EN: "Select an invite to view more details",
  42. FR: "Sélectionnez une invitation pour voir plus de détails",
  43. }),
  44. )
  45. .setMaxValues(1)
  46. .setOptions(
  47. invites.map((inv, i) => ({
  48. label: `#${pageIndex * PER_PAGE + i + 1}. Code: ${inv.code}`,
  49. value: inv.code,
  50. })),
  51. );
  52.  
  53. container.addActionRowComponents((row) =>
  54. row.addComponents(inviteSelectMenu),
  55. );
  56. container.addSeparatorComponents((s) => s);
  57.  
  58. let lines = [];
  59. for (let i = 0; i < invites.length; i++) {
  60. const inv = invites[i];
  61. let str = `> **${i + 1 + pageIndex * PER_PAGE}.** \`${inv.code}\``;
  62. if (inv.uses !== null) {
  63. str += translate(locale, {
  64. EN: ` used **${inv.uses.toLocaleString(locale)}**`,
  65. FR: ` utilisé **${inv.uses.toLocaleString(locale)}**`,
  66. });
  67. }
  68. if (inv.maxUses && inv.maxUses > 0)
  69. str += `/**${inv.maxUses.toLocaleString(locale)}**`;
  70. if (inv.uses !== null) {
  71. str += translate(locale, {
  72. EN: ` time${inv.uses! > 1 ? "s" : ""}`,
  73. FR: ` fois`,
  74. });
  75. }
  76. str += translate(locale, {
  77. EN: `, created <t:${Math.floor(inv.createdTimestamp! / 1000)}:R>`,
  78. FR: `, créé <t:${Math.floor(inv.createdTimestamp! / 1000)}:R>`,
  79. });
  80. if (inv.expiresTimestamp)
  81. str += translate(locale, {
  82. EN: `, expires <t:${Math.floor(inv.expiresTimestamp! / 1000)}:R>`,
  83. FR: `, expire <t:${Math.floor(inv.expiresTimestamp! / 1000)}:R>`,
  84. });
  85. lines.push(str);
  86. }
  87. container.addTextDisplayComponents((display) =>
  88. display.setContent(lines.join("\n")),
  89. );
  90. return container;
  91. };
Advertisement
Add Comment
Please, Sign In to add comment