2024-07-09 17:45:50 +01:00
import { ActionRowBuilder , AttachmentBuilder , ButtonBuilder , ButtonStyle , EmbedBuilder } from "discord.js" ;
2024-03-31 15:49:30 +01:00
import AppLogger from "../client/appLogger" ;
import cloneDeep from "clone-deep" ;
import { CoreClient } from "../client/client" ;
import EmbedColours from "../constants/EmbedColours" ;
import { CardRarityToString } from "../constants/CardRarity" ;
2024-07-09 17:45:50 +01:00
import ImageHelper from "./ImageHelper" ;
2024-03-31 15:49:30 +01:00
export default class SeriesHelper {
2024-07-12 17:35:12 +01:00
public static async GenerateSeriesViewPage ( seriesId : number , page : number , userId : string ) : Promise < { embed : EmbedBuilder , row : ActionRowBuilder < ButtonBuilder > , image : AttachmentBuilder } | null > {
2024-03-31 15:49:30 +01:00
AppLogger . LogSilly ( "Helpers/SeriesHelper" , ` Parameters: seriesId= ${ seriesId } , page= ${ page } ` ) ;
2024-07-09 17:45:50 +01:00
const itemsPerPage = 9 ;
2024-03-31 15:49:30 +01:00
const series = cloneDeep ( CoreClient . Cards )
. find ( x = > x . id == seriesId ) ;
if ( ! series ) {
AppLogger . LogVerbose ( "Helpers/SeriesHelper" , ` Unable to find series: ${ seriesId } ` ) ;
return null ;
}
const totalPages = Math . ceil ( series . cards . length / itemsPerPage ) ;
2024-07-08 17:55:55 +01:00
const totalCards = series . cards . length ;
2024-03-31 15:49:30 +01:00
if ( page > totalPages ) {
AppLogger . LogVerbose ( "Helpers/SeriesHelper" , ` Trying to find page greater than what exists for this series. Page: ${ page } but there are only ${ totalPages } pages ` ) ;
return null ;
}
const cardsOnPage = series . cards . splice ( page * itemsPerPage , itemsPerPage ) ;
const description = cardsOnPage
. map ( x = > ` [ ${ x . id } ] ${ x . name } ${ CardRarityToString ( x . type ) . toUpperCase ( ) } ` )
. join ( "\n" ) ;
const embed = new EmbedBuilder ( )
. setTitle ( series . name )
. setColor ( EmbedColours . Ok )
. setDescription ( description )
2024-07-09 17:45:50 +01:00
. setFooter ( { text : ` ${ series . id } · ${ totalCards } cards · Page ${ page + 1 } of ${ totalPages } ` } )
. setImage ( "attachment://page.png" ) ;
2024-03-31 15:49:30 +01:00
const row = new ActionRowBuilder < ButtonBuilder > ( )
. addComponents (
new ButtonBuilder ( )
. setCustomId ( ` series view ${ seriesId } ${ page - 1 } ` )
. setLabel ( "Previous" )
. setStyle ( ButtonStyle . Primary )
. setDisabled ( page == 0 ) ,
new ButtonBuilder ( )
. setCustomId ( ` series view ${ seriesId } ${ page + 1 } ` )
. setLabel ( "Next" )
. setStyle ( ButtonStyle . Primary )
2024-07-13 15:17:04 +01:00
. setDisabled ( page + 1 == totalPages ) ) ;
2024-03-31 15:49:30 +01:00
2024-07-12 17:35:12 +01:00
const buffer = await ImageHelper . GenerateCardImageGrid ( cardsOnPage . map ( x = > ( { id : x.id , path : x.path } ) ) , userId ) ;
2024-07-09 17:45:50 +01:00
const image = new AttachmentBuilder ( buffer , { name : "page.png" } ) ;
return { embed , row , image } ;
2024-03-31 15:49:30 +01:00
}
public static GenerateSeriesListPage ( page : number ) : { embed : EmbedBuilder , row : ActionRowBuilder < ButtonBuilder > } | null {
AppLogger . LogSilly ( "Helpers/InventoryHelper" , ` Parameters: page= ${ page } ` ) ;
const itemsPerPage = 15 ;
const series = cloneDeep ( CoreClient . Cards )
. sort ( ( a , b ) = > a . id - b . id ) ;
const totalPages = Math . ceil ( series . length / itemsPerPage ) ;
if ( page > totalPages ) {
AppLogger . LogVerbose ( "Helpers/SeriesHelper" , ` Trying to find page greater than what exists for this series. Page: ${ page } but there are only ${ totalPages } pages ` ) ;
return null ;
}
const seriesOnPage = series . splice ( page * itemsPerPage , itemsPerPage ) ;
const description = seriesOnPage
2024-07-12 16:09:26 +01:00
. map ( x = > ` [ ${ x . id } ] ${ x . name } ( ${ x . cards . length } cards) ` )
2024-03-31 15:49:30 +01:00
. join ( "\n" ) ;
const embed = new EmbedBuilder ( )
. setTitle ( "Series" )
. setColor ( EmbedColours . Ok )
. setDescription ( description )
. setFooter ( { text : ` ${ CoreClient . Cards . length } series · Page ${ page + 1 } of ${ totalPages } ` } ) ;
const row = new ActionRowBuilder < ButtonBuilder > ( )
. addComponents (
new ButtonBuilder ( )
. setCustomId ( ` series list ${ page - 1 } ` )
. setLabel ( "Previous" )
. setStyle ( ButtonStyle . Primary )
. setDisabled ( page == 0 ) ,
new ButtonBuilder ( )
. setCustomId ( ` series list ${ page + 1 } ` )
. setLabel ( "Next" )
. setStyle ( ButtonStyle . Primary )
2024-07-13 15:17:04 +01:00
. setDisabled ( page + 1 == totalPages ) ) ;
2024-03-31 15:49:30 +01:00
return { embed , row } ;
}
2024-07-08 17:55:55 +01:00
}