node-groupme
Version:
The only GroupMe API library that isn't a million years old.
80 lines (64 loc) • 2.18 kB
text/typescript
import type { APIMember } from 'groupme-api-types'
import { MemberRole } from 'groupme-api-types'
import type { BaseGroup, Client, FormerMember, User } from '..'
import { Base } from '..'
interface MemberInterface {}
export default class Member extends Base implements MemberInterface {
readonly user: User
readonly group: BaseGroup
readonly memberID: string
nickname: string
image_url: string | null
muted: boolean
// autokicked: boolean
roles: MemberRole[]
constructor(client: Client, group: BaseGroup, user: User, data: APIMember) {
super(client, user.id)
this.user = user
this.group = group
this.memberID = data.id
this.nickname = data.nickname
this.image_url = data.image_url
this.muted = data.muted
// this.autokicked = data.autokicked
this.roles = data.roles
}
_patch(data: Partial<APIMember>): this {
this.user._patch({
name: data.name,
// don't bother updating the user avatar because we don't know whether it's real or not
})
if (data.nickname !== undefined) this.nickname = data.nickname
if (data.image_url !== undefined) this.image_url = data.image_url
if (data.muted !== undefined) this.muted = data.muted
if (data.roles !== undefined) this.roles = data.roles
return this
}
get isAdmin(): boolean {
return this.roles.includes(MemberRole.Admin) || this.isOwner
}
get isOwner(): boolean {
return this.user.id === this.group.creatorID
}
get canLeaveGroup(): boolean {
return !this.isOwner
}
get canUpdateGroup(): boolean {
return this.isAdmin || !this.group.closed
}
get canAddMembers(): boolean {
return this.isAdmin || !this.group.closed
}
get canRemoveMembers(): boolean {
return this.isAdmin || !this.group.closed
}
get canDeleteGroup(): boolean {
return this.isOwner
}
get canTransferGroup(): boolean {
return this.isOwner
}
async remove(): Promise<FormerMember> {
return this.group.members.remove(this)
}
}