2022-07-10 17:48:38 -07:00
import { ActionRow , ButtonComponent , DiscordButtonStyles , DiscordenoMember , EmbedField , log , LT } from '../deps.ts' ;
2021-06-02 09:27:05 -07:00
2022-07-10 17:48:38 -07:00
import { JoinLeaveType , UrlIds } from './lfgHandlers.d.ts' ;
import { BuildingLFG } from './mod.d.ts' ;
import { LFGActivities } from './games.ts' ;
import { determineTZ } from './timeUtils.ts' ;
import { lfgStepQuestions } from './constantCmds.ts' ;
import { jsonStringifyBig } from './utils.ts' ;
2021-05-30 14:04:58 -07:00
export const handleLFGStep = async ( wipLFG : BuildingLFG , input : string ) : Promise < BuildingLFG > = > {
const currentLFG = ( wipLFG . lfgMsg . embeds [ 0 ] || { fields : undefined } ) . fields || [
{
2022-07-10 17:48:38 -07:00
name : '. . .' ,
value : '. . .' ,
inline : true ,
2021-05-30 14:04:58 -07:00
} ,
{
2022-07-10 17:48:38 -07:00
name : 'Start Time:' ,
value : '. . .' ,
inline : true ,
2021-05-30 14:04:58 -07:00
} ,
{
2022-07-10 17:48:38 -07:00
name : 'Add to Calendar:' ,
value : '. . .' ,
inline : true ,
2021-05-30 14:04:58 -07:00
} ,
{
2022-07-10 17:48:38 -07:00
name : 'Description:' ,
value : '. . .' ,
inline : false ,
2021-05-30 14:04:58 -07:00
} ,
{
name : ` Members Joined: 0/? ` ,
2022-07-10 17:48:38 -07:00
value : 'None' ,
inline : true ,
2021-05-30 14:04:58 -07:00
} ,
{
2022-07-10 17:48:38 -07:00
name : 'Alternates:' ,
value : 'None' ,
inline : true ,
} ,
2021-05-30 14:04:58 -07:00
] ;
2022-07-10 17:48:38 -07:00
let nextQuestion = '' ;
2021-05-30 14:04:58 -07:00
const nextComponents : Array < ActionRow > = [ ] ;
let editFlag = true ;
switch ( wipLFG . step ) {
2022-07-10 17:48:38 -07:00
case 'set_game' : {
2021-06-02 09:27:05 -07:00
currentLFG [ 0 ] . name = input . substr ( 0 , 254 ) ;
2021-05-30 14:04:58 -07:00
if ( Object . prototype . hasOwnProperty . call ( LFGActivities , input ) ) {
2021-06-02 09:27:05 -07:00
nextQuestion = lfgStepQuestions . set_activity_with_button ;
2021-05-30 14:04:58 -07:00
let tempObj = { } ;
2022-07-10 17:48:38 -07:00
Object . entries ( LFGActivities ) . some ( ( e ) = > {
2021-05-30 14:04:58 -07:00
if ( e [ 0 ] === input ) {
tempObj = e [ 1 ] ;
return true ;
}
} ) ;
2022-07-10 17:48:38 -07:00
const activityButtons : Array < ButtonComponent > = Object . keys ( tempObj ) . map ( ( activity ) = > {
2021-05-30 14:04:58 -07:00
return {
type : 2 ,
label : activity ,
customId : ` building@set_activity# ${ activity } ` ,
2022-07-10 17:48:38 -07:00
style : DiscordButtonStyles.Primary ,
2021-05-30 14:04:58 -07:00
} ;
} ) ;
2022-07-10 17:48:38 -07:00
const temp : Array < ActionRow [ ' components ' ] > = [ ] ;
2021-05-30 14:04:58 -07:00
activityButtons . forEach ( ( btn , idx ) = > {
2022-07-10 17:48:38 -07:00
if ( ! temp [ Math . floor ( idx / 5 ) ] ) {
temp [ Math . floor ( idx / 5 ) ] = [ btn ] ;
2021-05-30 14:04:58 -07:00
} else {
2022-07-10 17:48:38 -07:00
temp [ Math . floor ( idx / 5 ) ] . push ( btn ) ;
2021-05-30 14:04:58 -07:00
}
} ) ;
2022-07-10 17:48:38 -07:00
temp . forEach ( ( btns ) = > {
2021-05-30 14:04:58 -07:00
if ( btns . length && btns . length <= 5 ) {
nextComponents . push ( {
type : 1 ,
2022-07-10 17:48:38 -07:00
components : btns ,
2021-05-30 14:04:58 -07:00
} ) ;
}
} ) ;
} else {
2021-06-02 09:27:05 -07:00
nextQuestion = lfgStepQuestions . set_activity_with_text ;
2021-05-30 14:04:58 -07:00
}
2022-07-10 17:48:38 -07:00
wipLFG . step = 'set_activity' ;
2021-05-30 14:04:58 -07:00
break ;
}
2022-07-10 17:48:38 -07:00
case 'set_activity' : {
2021-05-30 14:04:58 -07:00
const game = currentLFG [ 0 ] . name ;
let tempObj ;
2022-07-10 17:48:38 -07:00
Object . entries ( LFGActivities ) . some ( ( e ) = > {
2021-05-30 14:04:58 -07:00
if ( e [ 0 ] === game ) {
2022-07-10 17:48:38 -07:00
Object . entries ( e [ 1 ] ) . some ( ( f ) = > {
2021-05-30 14:04:58 -07:00
if ( f [ 0 ] === input ) {
tempObj = f [ 1 ] ;
return true ;
}
} ) ;
return true ;
}
} ) ;
currentLFG [ 0 ] . name = ` ${ game } : ` ;
2021-06-02 09:27:05 -07:00
currentLFG [ 0 ] . value = input . substr ( 0 , 1023 ) ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
if ( typeof tempObj === 'number' ) {
2021-05-30 14:04:58 -07:00
// Activity
2022-07-10 17:48:38 -07:00
currentLFG [ 4 ] . name = ` Members Joined: ${ currentLFG [ 4 ] . value === 'None' ? 0 : currentLFG [ 4 ] . value . split ( '\n' ) . length } / ${ tempObj } ` ;
2021-05-30 14:04:58 -07:00
2021-06-02 09:27:05 -07:00
nextQuestion = wipLFG . editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = wipLFG . editing ? 'done' : 'set_time' ;
2021-05-30 14:04:58 -07:00
} else if ( ! tempObj ) {
// Custom
2021-06-02 09:27:05 -07:00
nextQuestion = lfgStepQuestions . set_player_cnt ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = 'set_player_cnt' ;
2021-05-30 14:04:58 -07:00
} else {
// Category
2021-06-02 09:27:05 -07:00
nextQuestion = lfgStepQuestions . set_activity_from_category ;
2021-05-30 14:04:58 -07:00
currentLFG [ 0 ] . name = game ;
2022-07-10 17:48:38 -07:00
const activityButtons : Array < ButtonComponent > = Object . keys ( tempObj ) . map ( ( activity ) = > {
2021-05-30 14:04:58 -07:00
return {
type : 2 ,
label : activity ,
customId : ` building@set_activity_from_category# ${ activity } ` ,
2022-07-10 17:48:38 -07:00
style : DiscordButtonStyles.Primary ,
2021-05-30 14:04:58 -07:00
} ;
} ) ;
2022-07-10 17:48:38 -07:00
const temp : Array < ActionRow [ ' components ' ] > = [ ] ;
2021-05-30 14:04:58 -07:00
activityButtons . forEach ( ( btn , idx ) = > {
2022-07-10 17:48:38 -07:00
if ( ! temp [ Math . floor ( idx / 5 ) ] ) {
temp [ Math . floor ( idx / 5 ) ] = [ btn ] ;
2021-05-30 14:04:58 -07:00
} else {
2022-07-10 17:48:38 -07:00
temp [ Math . floor ( idx / 5 ) ] . push ( btn ) ;
2021-05-30 14:04:58 -07:00
}
} ) ;
2022-07-10 17:48:38 -07:00
temp . forEach ( ( btns ) = > {
2021-05-30 14:04:58 -07:00
if ( btns . length && btns . length <= 5 ) {
nextComponents . push ( {
type : 1 ,
2022-07-10 17:48:38 -07:00
components : btns ,
2021-05-30 14:04:58 -07:00
} ) ;
}
} ) ;
2022-07-10 17:48:38 -07:00
wipLFG . step = 'set_activity_from_category' ;
2021-05-30 14:04:58 -07:00
}
break ;
}
2022-07-10 17:48:38 -07:00
case 'set_activity_from_category' : {
2021-05-30 14:04:58 -07:00
const game = currentLFG [ 0 ] . name ;
const category = currentLFG [ 0 ] . value ;
let tempObj ;
2022-07-10 17:48:38 -07:00
Object . entries ( LFGActivities ) . some ( ( e ) = > {
2021-05-30 14:04:58 -07:00
if ( e [ 0 ] === game ) {
2022-07-10 17:48:38 -07:00
Object . entries ( e [ 1 ] ) . some ( ( f ) = > {
2021-05-30 14:04:58 -07:00
if ( f [ 0 ] === category ) {
2022-07-10 17:48:38 -07:00
Object . entries ( f [ 1 ] ) . some ( ( g ) = > {
2021-05-30 14:04:58 -07:00
if ( g [ 0 ] === input ) {
tempObj = g [ 1 ] ;
return true ;
}
} ) ;
return true ;
}
} ) ;
return true ;
}
} ) ;
currentLFG [ 0 ] . name = ` ${ game } : ` ;
2021-06-02 09:27:05 -07:00
currentLFG [ 0 ] . value = input . substr ( 0 , 1023 ) ;
2021-05-30 14:04:58 -07:00
if ( tempObj ) {
2022-07-10 17:48:38 -07:00
currentLFG [ 4 ] . name = ` Members Joined: ${ currentLFG [ 4 ] . value === 'None' ? 0 : currentLFG [ 4 ] . value . split ( '\n' ) . length } / ${ tempObj } ` ;
nextQuestion = wipLFG . editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time ;
wipLFG . step = wipLFG . editing ? 'done' : 'set_time' ;
2021-05-30 14:04:58 -07:00
} else {
2022-07-10 17:48:38 -07:00
nextQuestion = lfgStepQuestions . set_player_cnt ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = 'set_player_cnt' ;
2021-05-30 14:04:58 -07:00
}
break ;
}
2022-07-10 17:48:38 -07:00
case 'set_player_cnt' : {
2021-05-30 14:04:58 -07:00
if ( parseInt ( input ) ) {
2022-07-10 17:48:38 -07:00
currentLFG [ 4 ] . name = ` Members Joined: ${ currentLFG [ 4 ] . value === 'None' ? 0 : currentLFG [ 4 ] . value . split ( '\n' ) . length } / ${ Math . abs ( parseInt ( input ) ) || 1 } ` ;
2021-05-30 14:04:58 -07:00
2021-06-02 09:27:05 -07:00
nextQuestion = wipLFG . editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_time ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = wipLFG . editing ? 'done' : 'set_time' ;
2021-05-30 14:04:58 -07:00
} else {
editFlag = false ;
2022-07-10 17:48:38 -07:00
nextQuestion = ` Input max members " ${ input } " is invalid, please make sure you are only entering a number. \ n \ n ${ lfgStepQuestions . set_player_cnt } ` ;
2021-05-30 14:04:58 -07:00
}
break ;
}
2022-07-10 17:48:38 -07:00
case 'set_time' : {
2021-05-30 14:04:58 -07:00
const today = new Date ( ) ;
let lfgDate = ` ${ today . getMonth ( ) + 1 } / ${ today . getDate ( ) } ` ,
2022-07-10 17:48:38 -07:00
lfgTime = '' ,
lfgTZ = '' ,
lfgPeriod = '' ,
2021-11-11 19:23:36 -08:00
overrodeTZ = false ;
2022-07-10 17:48:38 -07:00
input . split ( ' ' ) . forEach ( ( c ) = > {
if ( c . includes ( '/' ) ) {
2021-05-30 14:04:58 -07:00
lfgDate = c ;
2022-07-10 17:48:38 -07:00
} else if ( c . toLowerCase ( ) === 'am' || c . toLowerCase ( ) === 'pm' ) {
2021-05-30 14:04:58 -07:00
lfgPeriod = c . toLowerCase ( ) ;
2022-07-10 17:48:38 -07:00
} else if ( c . toLowerCase ( ) . includes ( 'am' ) || c . toLowerCase ( ) . includes ( 'pm' ) ) {
2021-05-30 14:04:58 -07:00
lfgTime = c . substr ( 0 , c . length - 2 ) ;
2022-07-10 17:48:38 -07:00
lfgPeriod = c . toLowerCase ( ) . includes ( 'am' ) ? 'am' : 'pm' ;
} else if ( c . includes ( ':' ) ) {
2021-06-02 09:27:05 -07:00
lfgTime = c ;
2022-07-10 17:48:38 -07:00
} else if ( parseInt ( c ) . toString ( ) === ( c . replace ( /^0+/ , '' ) || '0' ) ) {
2021-06-02 09:27:05 -07:00
if ( c . length === 4 ) {
if ( parseInt ( c ) >= 1300 ) {
lfgTime = ( parseInt ( c ) - 1200 ) . toString ( ) ;
2022-07-10 17:48:38 -07:00
lfgPeriod = 'pm' ;
2021-06-02 09:27:05 -07:00
} else if ( parseInt ( c ) >= 1200 ) {
lfgTime = c ;
2022-07-10 17:48:38 -07:00
lfgPeriod = 'pm' ;
2021-06-02 09:27:05 -07:00
} else {
2022-07-10 17:48:38 -07:00
lfgTime = c . startsWith ( '00' ) ? ` 12 ${ c . substr ( 2 ) } ` : c ;
lfgPeriod = 'am' ;
2021-06-02 09:27:05 -07:00
}
const hourLen = lfgTime . length === 4 ? 2 : 1 ;
lfgTime = ` ${ lfgTime . substr ( 0 , hourLen ) } : ${ lfgTime . substr ( hourLen ) } ` ;
} else {
lfgTime = c ;
}
2021-06-02 22:49:13 -07:00
} else if ( c . match ( /^\d/ ) ) {
const tzIdx = c . search ( /[a-zA-Z]/ ) ;
lfgTime = c . substr ( 0 , tzIdx ) ;
2021-11-11 19:23:36 -08:00
[ lfgTZ , overrodeTZ ] = determineTZ ( c . substr ( tzIdx ) ) ;
2021-05-30 14:04:58 -07:00
} else {
2021-11-11 19:23:36 -08:00
[ lfgTZ , overrodeTZ ] = determineTZ ( c ) ;
2021-05-30 14:04:58 -07:00
}
} ) ;
if ( ! lfgTZ ) {
2022-07-10 17:48:38 -07:00
[ lfgTZ , overrodeTZ ] = determineTZ ( 'ET' ) ;
2021-05-30 14:04:58 -07:00
}
2022-07-10 17:48:38 -07:00
if ( ! lfgTime . includes ( ':' ) ) {
lfgTime += ':00' ;
2021-05-30 14:04:58 -07:00
}
if ( ! lfgPeriod ) {
2022-07-10 17:48:38 -07:00
lfgPeriod = today . getHours ( ) >= 12 ? 'pm' : 'am' ;
2021-05-30 14:04:58 -07:00
}
2021-06-02 22:49:13 -07:00
2021-05-30 14:04:58 -07:00
lfgPeriod = lfgPeriod . toUpperCase ( ) ;
lfgTZ = lfgTZ . toUpperCase ( ) ;
2022-07-10 17:48:38 -07:00
lfgDate = ` ${ lfgDate . split ( '/' ) [ 0 ] } / ${ lfgDate . split ( '/' ) [ 1 ] } / ${ today . getFullYear ( ) } ` ;
2021-05-30 14:04:58 -07:00
2021-06-02 22:49:13 -07:00
log ( LT . LOG , ` Date Time Debug | ${ lfgTime } ${ lfgPeriod } ${ lfgTZ } ${ lfgDate } ` ) ;
2021-06-02 09:27:05 -07:00
const lfgDateTime = new Date ( ` ${ lfgTime } ${ lfgPeriod } ${ lfgTZ } ${ lfgDate } ` ) ;
2022-07-10 17:48:38 -07:00
lfgDate = ` ${ lfgDate . split ( '/' ) [ 0 ] } / ${ lfgDate . split ( '/' ) [ 1 ] } ` ;
2021-05-30 14:04:58 -07:00
const lfgDateStr = ` [ ${ lfgTime } ${ lfgPeriod } ${ lfgTZ } ${ lfgDate } ](https://groupup.eanm.dev/tz# ${ lfgDateTime . getTime ( ) } ) ` ;
2021-11-11 21:28:07 -08:00
const icsDetails = ` ${ currentLFG [ 0 ] . name } ${ currentLFG [ 0 ] . value } ` ;
2022-07-10 17:48:38 -07:00
const icsStr = ` [Download ICS File](https://groupup.eanm.dev/ics?t= ${ lfgDateTime . getTime ( ) } &n= ${ icsDetails . replaceAll ( ' ' , '+' ) } ) ` ;
2021-11-11 21:28:07 -08:00
2022-07-10 17:48:38 -07:00
currentLFG [ 1 ] . name = 'Start Time (Click for Conversion):' ;
2021-06-02 09:27:05 -07:00
currentLFG [ 1 ] . value = lfgDateStr . substr ( 0 , 1023 ) ;
2021-11-11 21:28:07 -08:00
currentLFG [ 2 ] . value = icsStr . substr ( 0 , 1023 ) ;
2021-05-30 14:04:58 -07:00
if ( isNaN ( lfgDateTime . getTime ( ) ) ) {
2022-07-10 17:48:38 -07:00
nextQuestion =
` Input time " ${ input } " (parsed as " ${ lfgTime } ${ lfgPeriod } ${ lfgTZ } ${ lfgDate } ") is invalid, please make sure you have the timezone set correctly. \ n \ n ${ lfgStepQuestions . set_time } ` ;
2021-06-02 09:27:05 -07:00
editFlag = false ;
} else if ( lfgDateTime . getTime ( ) <= today . getTime ( ) ) {
2022-07-10 17:48:38 -07:00
nextQuestion =
` Input time " ${ input } " (parsed as " ${ lfgTime } ${ lfgPeriod } ${ lfgTZ } ${ lfgDate } ") is in the past, please make sure you are setting up the event to be in the future. \ n \ n ${ lfgStepQuestions . set_time } ` ;
2021-05-30 14:04:58 -07:00
editFlag = false ;
} else {
2021-06-02 09:27:05 -07:00
nextQuestion = wipLFG . editing ? lfgStepQuestions.set_done : lfgStepQuestions.set_desc ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = wipLFG . editing ? 'done' : 'set_desc' ;
2021-05-30 14:04:58 -07:00
}
break ;
}
2022-07-10 17:48:38 -07:00
case 'set_desc' : {
if ( input === 'none' ) {
2021-05-30 14:04:58 -07:00
input = currentLFG [ 0 ] . value ;
}
2021-06-02 09:27:05 -07:00
currentLFG [ 3 ] . value = input . substr ( 0 , 1023 ) ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
nextQuestion = lfgStepQuestions . set_done ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
wipLFG . step = 'done' ;
2021-05-30 14:04:58 -07:00
break ;
}
default :
break ;
}
2021-06-02 09:27:05 -07:00
try {
if ( editFlag ) {
wipLFG . lfgMsg = await wipLFG . lfgMsg . edit ( {
2021-11-11 19:23:36 -08:00
embeds : [ {
2022-07-10 17:48:38 -07:00
fields : currentLFG ,
} ] ,
2021-06-02 09:27:05 -07:00
} ) ;
}
wipLFG . questionMsg = await wipLFG . questionMsg . edit ( {
content : nextQuestion ,
2022-07-10 17:48:38 -07:00
components : nextComponents ,
2021-05-30 14:04:58 -07:00
} ) ;
2022-07-10 17:48:38 -07:00
} catch ( e ) {
2021-11-11 19:23:36 -08:00
log ( LT . WARN , ` Failed to edit active builder | ${ wipLFG . userId } - ${ wipLFG . channelId } | ${ jsonStringifyBig ( e ) } ` ) ;
2021-06-02 09:27:05 -07:00
}
2021-05-30 14:04:58 -07:00
return wipLFG ;
} ;
export const handleMemberJoin = ( lfg : EmbedField [ ] , member : DiscordenoMember , alternate : boolean ) : JoinLeaveType = > {
let success = false ;
2021-11-11 19:23:36 -08:00
let justFilled = false ;
2022-07-10 17:48:38 -07:00
2021-05-30 14:04:58 -07:00
const userStr = ` ${ member . username } - <@ ${ member . id } > ` ;
2022-07-10 17:48:38 -07:00
const tempMembers = lfg [ 4 ] . name . split ( ':' ) [ 1 ] . split ( '/' ) ;
2021-05-30 14:04:58 -07:00
let currentMembers = parseInt ( tempMembers [ 0 ] ) ;
const maxMembers = parseInt ( tempMembers [ 1 ] ) ;
if ( alternate && ! lfg [ 5 ] . value . includes ( member . id . toString ( ) ) ) {
2021-11-11 19:23:36 -08:00
// remove from joined list
2021-05-30 14:04:58 -07:00
if ( lfg [ 4 ] . value . includes ( member . id . toString ( ) ) ) {
2022-07-10 17:48:38 -07:00
const tempArr = lfg [ 4 ] . value . split ( '\n' ) ;
const memberIdx = tempArr . findIndex ( ( m ) = > m . includes ( member . id . toString ( ) ) ) ;
tempArr . splice ( memberIdx , 1 ) ;
lfg [ 4 ] . value = tempArr . join ( '\n' ) || 'None' ;
2021-05-30 14:04:58 -07:00
if ( currentMembers ) {
currentMembers -- ;
}
lfg [ 4 ] . name = ` Members Joined: ${ currentMembers } / ${ maxMembers } ` ;
}
2022-07-10 17:48:38 -07:00
if ( lfg [ 5 ] . value === 'None' ) {
2021-05-30 14:04:58 -07:00
lfg [ 5 ] . value = userStr ;
} else {
lfg [ 5 ] . value += ` \ n ${ userStr } ` ;
}
success = true ;
2021-11-11 19:23:36 -08:00
} else if ( ! alternate && currentMembers < maxMembers && ! lfg [ 4 ] . value . includes ( member . id . toString ( ) ) ) {
// remove from alternate list
2021-05-30 14:04:58 -07:00
if ( lfg [ 5 ] . value . includes ( member . id . toString ( ) ) ) {
2022-07-10 17:48:38 -07:00
const tempArr = lfg [ 5 ] . value . split ( '\n' ) ;
const memberIdx = tempArr . findIndex ( ( m ) = > m . includes ( member . id . toString ( ) ) ) ;
2021-11-11 19:23:36 -08:00
tempArr . splice ( memberIdx , 1 ) ;
2022-07-10 17:48:38 -07:00
lfg [ 5 ] . value = tempArr . join ( '\n' ) || 'None' ;
2021-05-30 14:04:58 -07:00
}
2022-07-10 17:48:38 -07:00
if ( lfg [ 4 ] . value === 'None' ) {
2021-05-30 14:04:58 -07:00
lfg [ 4 ] . value = userStr ;
} else {
lfg [ 4 ] . value += ` \ n ${ userStr } ` ;
}
currentMembers ++ ;
2021-11-11 19:23:36 -08:00
justFilled = currentMembers === maxMembers ;
2021-05-30 14:04:58 -07:00
lfg [ 4 ] . name = ` Members Joined: ${ currentMembers } / ${ maxMembers } ` ;
success = true ;
2021-11-11 19:23:36 -08:00
} else if ( ! alternate && currentMembers === maxMembers && ! lfg [ 4 ] . value . includes ( member . id . toString ( ) ) ) {
// update user in alternate list to include the * to make them autojoin
if ( lfg [ 5 ] . value . includes ( member . id . toString ( ) ) ) {
2022-07-10 17:48:38 -07:00
const tempArr = lfg [ 5 ] . value . split ( '\n' ) ;
const memberIdx = tempArr . findIndex ( ( m ) = > m . includes ( member . id . toString ( ) ) ) ;
2021-11-11 19:23:36 -08:00
tempArr [ memberIdx ] = ` ${ tempArr [ memberIdx ] } * ` ;
2022-07-10 17:48:38 -07:00
lfg [ 5 ] . value = tempArr . join ( '\n' ) ;
2021-11-11 19:23:36 -08:00
} else {
2022-07-10 17:48:38 -07:00
if ( lfg [ 5 ] . value === 'None' ) {
2021-11-11 19:23:36 -08:00
lfg [ 5 ] . value = ` ${ userStr } * ` ;
} else {
lfg [ 5 ] . value += ` \ n ${ userStr } * ` ;
}
success = true ;
}
2021-05-30 14:04:58 -07:00
}
return {
embed : lfg ,
success : success ,
2021-11-11 19:23:36 -08:00
full : currentMembers === maxMembers ,
2022-07-10 17:48:38 -07:00
justFilled : justFilled ,
2021-05-30 14:04:58 -07:00
} ;
} ;
export const handleMemberLeave = ( lfg : EmbedField [ ] , member : DiscordenoMember ) : JoinLeaveType = > {
let success = false ;
const memberId = member . id . toString ( ) ;
2022-07-10 17:48:38 -07:00
const tempMembers = lfg [ 4 ] . name . split ( ':' ) [ 1 ] . split ( '/' ) ;
2021-05-30 14:04:58 -07:00
let currentMembers = parseInt ( tempMembers [ 0 ] ) ;
const maxMembers = parseInt ( tempMembers [ 1 ] ) ;
if ( lfg [ 4 ] . value . includes ( memberId ) ) {
2022-07-10 17:48:38 -07:00
const tempArr = lfg [ 4 ] . value . split ( '\n' ) ;
const memberIdx = tempArr . findIndex ( ( m ) = > m . includes ( memberId ) ) ;
2021-05-30 14:04:58 -07:00
tempArr . splice ( memberIdx , 1 ) ;
2022-07-10 17:48:38 -07:00
lfg [ 4 ] . value = tempArr . join ( '\n' ) || 'None' ;
2021-05-30 14:04:58 -07:00
2022-07-10 17:48:38 -07:00
if ( lfg [ 5 ] . value . includes ( '*' ) ) {
2021-11-11 19:23:36 -08:00
// find first * user and move them to the joined list
2022-07-10 17:48:38 -07:00
const tempArr2 = lfg [ 5 ] . value . split ( '\n' ) ;
const memberToMoveIdx = tempArr2 . findIndex ( ( m ) = > m . includes ( '*' ) ) ;
2021-11-11 19:23:36 -08:00
let memberToMove = tempArr2 [ memberToMoveIdx ] ;
memberToMove = memberToMove . substr ( 0 , memberToMove . length - 2 ) ;
tempArr . push ( memberToMove ) ;
2022-07-10 17:48:38 -07:00
lfg [ 4 ] . value = tempArr . join ( '\n' ) || 'None' ;
2021-11-11 19:23:36 -08:00
// Remove them from the alt list
tempArr2 . splice ( memberToMoveIdx , 1 ) ;
2022-07-10 17:48:38 -07:00
lfg [ 5 ] . value = tempArr2 . join ( '\n' ) || 'None' ;
2021-11-11 19:23:36 -08:00
} else {
// update count since no users were marked as *
if ( currentMembers ) {
currentMembers -- ;
}
lfg [ 4 ] . name = ` Members Joined: ${ currentMembers } / ${ maxMembers } ` ;
2021-05-30 14:04:58 -07:00
}
success = true ;
}
if ( lfg [ 5 ] . value . includes ( memberId ) ) {
2022-07-10 17:48:38 -07:00
const tempArr = lfg [ 5 ] . value . split ( '\n' ) ;
const memberIdx = tempArr . findIndex ( ( m ) = > m . includes ( memberId ) ) ;
2021-05-30 14:04:58 -07:00
tempArr . splice ( memberIdx , 1 ) ;
2022-07-10 17:48:38 -07:00
lfg [ 5 ] . value = tempArr . join ( '\n' ) || 'None' ;
2021-05-30 14:04:58 -07:00
success = true ;
}
return {
embed : lfg ,
success : success ,
2021-11-11 19:23:36 -08:00
full : currentMembers === maxMembers ,
2022-07-10 17:48:38 -07:00
justFilled : false ,
2021-11-11 19:23:36 -08:00
} ;
} ;
export const urlToIds = ( url : string ) : UrlIds = > {
const strIds = {
2022-07-10 17:48:38 -07:00
guildId : '' ,
channelId : '' ,
messageId : '' ,
2021-11-11 19:23:36 -08:00
} ;
url = url . toLowerCase ( ) ;
2022-07-10 17:48:38 -07:00
[ strIds . guildId , strIds . channelId , strIds . messageId ] = url . substr ( url . indexOf ( 'channels' ) + 9 ) . split ( '/' ) ;
2021-11-11 19:23:36 -08:00
return {
guildId : BigInt ( strIds . guildId ) ,
channelId : BigInt ( strIds . channelId ) ,
2022-07-10 17:48:38 -07:00
messageId : BigInt ( strIds . messageId ) ,
2021-05-30 14:04:58 -07:00
} ;
} ;