2026-02-13 18:20:29 -05:00
import { db } from '../sequelize.js' ;
const mh = { } ;
const errorEnums = {
NO _MEMBER : "No member was found." ,
NO _NAME _PROVIDED : "No member name was provided for" ,
2026-02-13 18:56:36 -05:00
NO _VALUE : "has not been set for this member. Please provide a value." ,
2026-02-13 18:20:29 -05:00
ADD _ERROR : "Error adding member." ,
2026-02-13 18:56:36 -05:00
MEMBER _EXISTS : "A member with that name already exists. Please pick a unique name." ,
USER _NO _MEMBERS : "You have no members created." ,
DISPLAY _NAME _TOO _LONG : "The display name is too long. Please limit it to 32 characters or less." ,
PROXY _EXISTS : "A duplicate proxy already exists for one of your members. Please pick a new one, or change the old one first."
}
const helpEnums = {
2026-02-13 20:38:51 -05:00
MEMBER : "You can shorten this command to `pf;m`. The available subcommands for `pf;member` are `add`, `remove`, `displayname`, and `proxy`. Add ` --help` to the end of a subcommand to find out more about it, or just send it without arguments." ,
2026-02-13 20:08:24 -05:00
ADD : "Creates a new member to proxy with: `pf;member jane`. The member name should ideally be short so you can write other commands with it. \nYou can optionally add a display name after the member name: `pf;member new jane \"Jane Doe | ze/hir\"`. If it has spaces, put it in **double quotes**. The length limit is 32 characters." ,
2026-02-13 18:56:36 -05:00
REMOVE : "Removes a member based on their name. `pf;member remove jane`." ,
DISPLAYNAME : "Updates the display name for a specific member based on their name. `pf;member jane \"Jane Doe | ze/hir\"`.This can be up to 32 characters long. If it has spaces, put it in quotes." ,
PROXY : "Updates the proxy tag for a specific member based on their name. `pf;member jane proxy Jane:`. This is put at **the start** of a message to allow it to be proxied. Proxies that wrap around text or go at the end are **not** currently supported."
2026-02-13 18:20:29 -05:00
}
2026-02-13 20:38:51 -05:00
mh . parseMemberCommand = async function ( authorId , args ) {
console . log ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
if ( ! args ) {
2026-02-13 20:38:51 -05:00
return helpEnums . MEMBER ;
2026-02-13 18:20:29 -05:00
}
switch ( args [ 0 ] ) {
2026-02-13 20:08:24 -05:00
case '--help' :
return helpEnums . MEMBER ;
case 'add' :
2026-02-13 20:38:51 -05:00
return await addNewMember ( authorId , args ) ;
2026-02-13 18:56:36 -05:00
case 'remove' :
2026-02-13 20:38:51 -05:00
return await removeMember ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
}
switch ( args [ 1 ] ) {
2026-02-13 18:56:36 -05:00
case '--help' :
2026-02-13 20:08:24 -05:00
return helpEnums . MEMBER ;
2026-02-13 18:20:29 -05:00
case 'displayname' :
2026-02-13 20:38:51 -05:00
return await updateDisplayName ( authorId , args ) ;
2026-02-13 18:56:36 -05:00
case 'proxy' :
2026-02-13 20:38:51 -05:00
return await updateProxy ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
// case 'avatar':
2026-02-13 20:38:51 -05:00
// return await set_avatar(authorId, args)
2026-02-13 18:20:29 -05:00
default :
2026-02-13 20:38:51 -05:00
return await getMemberInfo ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
}
}
2026-02-13 20:38:51 -05:00
async function addNewMember ( authorId , args ) {
if ( args [ 1 ] && args [ 1 ] === "--help" || ! args [ 1 ] ) {
return helpEnums . ADD ;
2026-02-13 18:20:29 -05:00
}
2026-02-13 20:38:51 -05:00
const memberName = args [ 1 ] ;
const displayName = args [ 2 ] ;
const member = await getMemberInfo ( authorId , memberName ) ;
2026-02-13 18:20:29 -05:00
if ( member !== errorEnums . NO _MEMBER ) {
return errorEnums . MEMBER _EXISTS ;
}
2026-02-13 20:38:51 -05:00
const trimmedName = displayName ? displayName . replaceAll ( ' ' , '' ) : null ;
2026-02-13 18:20:29 -05:00
return await db . members . create ( {
2026-02-13 20:38:51 -05:00
name : memberName ,
userid : authorId ,
displayname : trimmedName !== null ? displayName : null ,
2026-02-13 18:20:29 -05:00
} ) . then ( ( m ) => {
let success = ` Member was successfully added. \n Name: ${ m . dataValues . name } `
2026-02-13 20:38:51 -05:00
success += displayName ? ` \n Display name: ${ m . dataValues . displayname } ` : "" ;
2026-02-13 18:20:29 -05:00
return success ;
} ) . catch ( e => {
return ` ${ errorEnums . ADD _ERROR } : ${ e . message } ` ;
} )
}
2026-02-13 20:38:51 -05:00
async function updateDisplayName ( authorId , args ) {
if ( args [ 1 ] && args [ 1 ] === "--help" || ! args [ 1 ] ) {
return helpEnums . DISPLAYNAME ;
2026-02-13 18:20:29 -05:00
}
2026-02-13 20:38:51 -05:00
const memberName = args [ 0 ] ;
const displayName = args [ 2 ] ;
const trimmed _name = displayName ? displayName . replaceAll ( ' ' , '' ) : null ;
if ( ! displayName || trimmed _name === null ) {
let member = getMemberInfo ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
if ( member . displayname ) {
2026-02-13 20:38:51 -05:00
return ` Display name for ${ memberName } is: ${ member . displayname } . ` ;
2026-02-13 18:20:29 -05:00
}
return ` Display name ${ errorEnums . NO _VALUE } `
}
2026-02-13 20:38:51 -05:00
else if ( displayName . count > 32 ) {
2026-02-13 18:56:36 -05:00
return errorEnums . DISPLAY _NAME _TOO _LONG ;
}
2026-02-13 20:38:51 -05:00
console . log ( displayName ) ;
return await updateMember ( authorId , args ) ;
2026-02-13 18:20:29 -05:00
}
2026-02-13 20:38:51 -05:00
async function updateProxy ( authorId , args ) {
if ( args [ 1 ] && args [ 1 ] === "--help" || ! args [ 1 ] ) {
return helpEnums . PROXY ;
}
2026-02-13 18:56:36 -05:00
const proxy = args [ 2 ] ;
2026-02-13 20:38:51 -05:00
const trimmedProxy = proxy ? proxy . replaceAll ( ' ' , '' ) : null ;
2026-02-13 18:56:36 -05:00
2026-02-13 20:38:51 -05:00
if ( trimmedProxy == null ) {
2026-02-13 18:56:36 -05:00
return ;
}
2026-02-13 20:38:51 -05:00
const members = await mh . getMembersByAuthor ( authorId ) ;
2026-02-13 20:08:24 -05:00
const proxyExists = members . some ( member => member . proxy === proxy ) ;
if ( proxyExists ) {
return errorEnums . PROXY _EXISTS ;
}
2026-02-13 20:38:51 -05:00
return await updateMember ( authorId , args ) ;
2026-02-13 18:56:36 -05:00
}
2026-02-13 20:38:51 -05:00
async function removeMember ( authorId , args ) {
if ( args [ 1 ] && args [ 1 ] === "--help" ) {
return helpEnums . REMOVE ;
}
const memberName = args [ 1 ] ;
if ( ! memberName ) {
return ` ${ errorEnums . NO _NAME _PROVIDED } deletion. ` ;
}
return await db . members . destroy ( { where : { name : memberName , userid : authorId } } ) . then ( ( ) => {
return ` ${ memberName } has been deleted. ` ;
2026-02-13 18:20:29 -05:00
} ) . catch ( e => {
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
2026-02-13 20:38:51 -05:00
/* non-commands */
async function updateMember ( authorId , args ) {
const memberName = args [ 0 ] ;
const columnName = args [ 1 ] ;
const value = args [ 2 ] ;
return await db . members . update ( { [ columnName ] : value } , { where : { name : memberName , userid : authorId } } ) . then ( ( ) => {
return ` Updated ${ columnName } for ${ memberName } to ${ value } ` ;
2026-02-13 18:20:29 -05:00
} ) . catch ( e => {
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
2026-02-13 20:38:51 -05:00
async function getMemberInfo ( authorId , memberName ) {
let member = await db . members . findOne ( { where : { name : memberName , userid : authorId } } ) ;
if ( member ) {
let member _info = ` Member name: ${ member . name } ` ;
member _info += member . displayname ? ` \n Display name: ${ member . displayname } ` : '\nDisplay name: unset' ;
member _info += member . proxy ? ` \n Proxy Tag: ${ member . proxy } ` : '\nProxy tag: unset' ;
member _info += member . propic ? ` \n Profile pic: ${ member . propic } ` : '\nProfile pic: unset' ;
return member _info ;
}
return errorEnums . NO _MEMBER ;
}
mh . getMemberByProxy = async function ( authorId , proxy ) {
return await db . members . findOne ( { where : { userid : authorId , proxy : proxy } } ) . catch ( e => {
2026-02-13 18:20:29 -05:00
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
2026-02-13 20:38:51 -05:00
mh . getMembersByAuthor = async function ( authorId ) {
return await db . members . findAll ( { where : { userid : authorId } } ) . catch ( e => {
2026-02-13 18:20:29 -05:00
// I have no idea how this could possibly happen but better safe than sorry
return ` ${ errorEnums . USER _NO _MEMBERS } : ${ e . message } ` ;
} ) ;
}
export const memberHelper = mh ;