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 = {
NEW : "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." ,
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
}
mh . parse _member _command = async function ( author _id , args ) {
console . log ( author _id , args ) ;
if ( ! args ) {
return ` ${ errorEnums . NO _NAME _PROVIDED } querying. `
}
switch ( args [ 0 ] ) {
case 'new' :
return await add _new _member ( author _id , args ) ;
2026-02-13 18:56:36 -05:00
case 'remove' :
return await remove _member ( author _id , args ) ;
2026-02-13 18:20:29 -05:00
}
switch ( args [ 1 ] ) {
2026-02-13 18:56:36 -05:00
case '--help' :
return
2026-02-13 18:20:29 -05:00
case 'displayname' :
2026-02-13 18:56:36 -05:00
return await update _display _name ( author _id , args ) ;
case 'proxy' :
return await update _proxy ( author _id , args ) ;
2026-02-13 18:20:29 -05:00
// case 'avatar':
// return await set_avatar(author_id, args)
default :
return await get _member _info ( author _id , args ) ;
}
}
async function add _new _member ( author _id , args ) {
const member _name = args [ 1 ] ;
const display _name = args [ 2 ] ;
if ( ! member _name ) {
return ` ${ errorEnums . NO _NAME _PROVIDED } adding. ` ;
}
const member = await get _member _info ( author _id , member _name ) ;
if ( member !== errorEnums . NO _MEMBER ) {
return errorEnums . MEMBER _EXISTS ;
}
const trimmed _name = display _name ? display _name . replaceAll ( ' ' , '' ) : null ;
return await db . members . create ( {
name : member _name ,
userid : author _id ,
displayname : trimmed _name !== null ? display _name : null ,
} ) . then ( ( m ) => {
let success = ` Member was successfully added. \n Name: ${ m . dataValues . name } `
success += display _name ? ` \n Display name: ${ m . dataValues . displayname } ` : "" ;
return success ;
} ) . catch ( e => {
return ` ${ errorEnums . ADD _ERROR } : ${ e . message } ` ;
} )
}
async function get _member _info ( author _id , member _name ) {
let member = await db . members . findOne ( { where : { name : member _name , userid : author _id } } ) ;
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 ;
}
2026-02-13 18:56:36 -05:00
async function update _display _name ( author _id , args ) {
2026-02-13 18:20:29 -05:00
const member _name = args [ 0 ] ;
const display _name = args [ 2 ] ;
const trimmed _name = display _name ? display _name . replaceAll ( ' ' , '' ) : null ;
console . log ( trimmed _name , display _name ) ;
if ( ! member _name ) {
return ` ${ errorEnums . NO _NAME _PROVIDED } display name. ` ;
}
else if ( ! display _name || trimmed _name === null ) {
let member = await get _member _info ( author _id , args ) ;
console . log ( member . displayname ) ;
if ( member . displayname ) {
return ` Display name for ${ member _name } is: ${ member . displayname } . ` ;
}
return ` Display name ${ errorEnums . NO _VALUE } `
}
2026-02-13 18:56:36 -05:00
else if ( display _name . count > 32 ) {
return errorEnums . DISPLAY _NAME _TOO _LONG ;
}
2026-02-13 18:20:29 -05:00
console . log ( display _name ) ;
return await update _member ( author _id , args ) ;
}
2026-02-13 18:56:36 -05:00
async function update _proxy ( author _id , args ) {
const proxy = args [ 2 ] ;
const trimmed _proxy = proxy ? proxy . replaceAll ( ' ' , '' ) : null ;
if ( trimmed _proxy == null ) {
return ;
}
const members = mh . get _members _by _author ( author _id ) ;
members . forEach ( member => {
if ( member . proxy === proxy ) {
return errorEnums . PROXY _EXISTS ;
}
} )
return await update _member ( author _id , args ) ;
}
2026-02-13 18:20:29 -05:00
async function update _member ( author _id , args ) {
const member _name = args [ 0 ] ;
const column _Name = args [ 1 ] ;
const value = args [ 2 ] ;
return await db . members . update ( { [ column _Name ] : value } , { where : { name : member _name , userid : author _id } } ) . then ( ( ) => {
return ` Updated ${ column _Name } for ${ member _name } to ${ value } ` ;
} ) . catch ( e => {
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
2026-02-13 18:56:36 -05:00
async function remove _member ( author _id , args ) {
2026-02-13 18:20:29 -05:00
const member _name = args [ 1 ] ;
if ( ! member _name ) {
return ` ${ errorEnums . NO _NAME _PROVIDED } deletion. ` ;
}
return await db . members . destroy ( { where : { name : member _name , userid : author _id } } ) . then ( ( ) => {
return ` ${ member _name } has been deleted. ` ;
} ) . catch ( e => {
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
mh . get _member _by _proxy = async function ( author _id , proxy ) {
return await db . members . findOne ( { where : { userid : author _id , proxy : proxy } } ) . catch ( e => {
return ` ${ errorEnums . NO _MEMBER } : ${ e . message } ` ;
} ) ;
}
mh . get _members _by _author = async function ( author _id ) {
return await db . members . findAll ( { where : { userid : author _id } } ) . catch ( e => {
// 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 ;