2021-04-04 05:42:15 +00:00
|
|
|
import { Client } from '../client/mod.ts'
|
2021-01-25 11:38:56 +00:00
|
|
|
import { SnowflakeBase } from './base.ts'
|
2021-01-20 16:28:18 +00:00
|
|
|
import { RoleModifyPayload, RolePayload } from '../types/role.ts'
|
2020-12-02 12:29:52 +00:00
|
|
|
import { Permissions } from '../utils/permissions.ts'
|
2021-01-20 16:28:18 +00:00
|
|
|
import { Guild } from './guild.ts'
|
2021-01-24 18:49:08 +00:00
|
|
|
import { Member } from './member.ts'
|
|
|
|
import { User } from './user.ts'
|
2020-10-22 15:50:47 +00:00
|
|
|
|
2021-01-25 11:38:56 +00:00
|
|
|
/** Represents a Guild Role */
|
|
|
|
export class Role extends SnowflakeBase {
|
2020-10-22 15:50:47 +00:00
|
|
|
id: string
|
2021-01-20 16:28:18 +00:00
|
|
|
guild: Guild
|
2020-10-22 15:50:47 +00:00
|
|
|
name: string
|
|
|
|
color: number
|
|
|
|
hoist: boolean
|
|
|
|
position: number
|
2020-11-15 07:32:46 +00:00
|
|
|
permissions: Permissions
|
2020-10-22 15:50:47 +00:00
|
|
|
managed: boolean
|
|
|
|
mentionable: boolean
|
2020-12-25 18:29:26 +00:00
|
|
|
tags?: RoleTags
|
2020-11-09 10:29:16 +00:00
|
|
|
|
2021-01-20 16:28:18 +00:00
|
|
|
constructor(client: Client, data: RolePayload, guild: Guild) {
|
2020-10-25 06:50:32 +00:00
|
|
|
super(client, data)
|
2020-10-22 15:50:47 +00:00
|
|
|
this.id = data.id
|
2021-01-20 16:28:18 +00:00
|
|
|
this.guild = guild
|
2020-10-22 15:50:47 +00:00
|
|
|
this.name = data.name
|
|
|
|
this.color = data.color
|
|
|
|
this.hoist = data.hoist
|
|
|
|
this.position = data.position
|
2020-11-15 07:32:46 +00:00
|
|
|
this.permissions = new Permissions(data.permissions)
|
2020-10-22 15:50:47 +00:00
|
|
|
this.managed = data.managed
|
|
|
|
this.mentionable = data.mentionable
|
2020-12-25 18:29:26 +00:00
|
|
|
this.tags =
|
2020-12-28 08:18:09 +00:00
|
|
|
data.tags !== undefined
|
2020-12-25 18:29:26 +00:00
|
|
|
? {
|
|
|
|
botID: data.tags?.bot_id,
|
|
|
|
integrationID: data.tags?.integration_id,
|
|
|
|
premiumSubscriber: 'premium_subscriber' in (data.tags ?? {})
|
|
|
|
}
|
|
|
|
: undefined
|
2020-10-29 14:43:27 +00:00
|
|
|
}
|
|
|
|
|
2020-12-03 05:28:20 +00:00
|
|
|
readFromData(data: RolePayload): void {
|
2020-10-29 14:43:27 +00:00
|
|
|
this.name = data.name ?? this.name
|
|
|
|
this.color = data.color ?? this.color
|
|
|
|
this.hoist = data.hoist ?? this.hoist
|
|
|
|
this.position = data.position ?? this.position
|
2020-12-02 12:29:52 +00:00
|
|
|
this.permissions =
|
|
|
|
data.permissions !== undefined
|
|
|
|
? new Permissions(data.permissions)
|
|
|
|
: this.permissions
|
2020-10-29 14:43:27 +00:00
|
|
|
this.managed = data.managed ?? this.managed
|
|
|
|
this.mentionable = data.mentionable ?? this.mentionable
|
2020-10-22 15:50:47 +00:00
|
|
|
}
|
2021-01-20 16:28:18 +00:00
|
|
|
|
2021-01-25 11:38:56 +00:00
|
|
|
/** Delete the Role */
|
|
|
|
async delete(): Promise<Role | undefined> {
|
|
|
|
return this.guild.roles.delete(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Edit the Role */
|
|
|
|
async edit(options: RoleModifyPayload): Promise<Role> {
|
|
|
|
return this.guild.roles.edit(this, options)
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Add the Role to a Member */
|
2021-01-24 18:49:08 +00:00
|
|
|
async addTo(member: Member | User | string): Promise<boolean> {
|
|
|
|
if (member instanceof User) {
|
|
|
|
member = member.id
|
|
|
|
}
|
|
|
|
if (typeof member === 'string') {
|
|
|
|
const tempMember = await this.guild.members.get(member)
|
|
|
|
if (tempMember === undefined) {
|
|
|
|
throw new Error(`Couldn't find the member ${member}.`)
|
|
|
|
} else {
|
|
|
|
member = tempMember
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return member.roles.add(this.id)
|
|
|
|
}
|
|
|
|
|
2021-01-25 11:38:56 +00:00
|
|
|
/** Remove the Role from a Member */
|
2021-01-24 18:49:08 +00:00
|
|
|
async removeFrom(member: Member | User | string): Promise<boolean> {
|
|
|
|
if (member instanceof User) {
|
|
|
|
member = member.id
|
|
|
|
}
|
|
|
|
if (typeof member === 'string') {
|
|
|
|
const tempMember = await this.guild.members.get(member)
|
|
|
|
if (tempMember === undefined) {
|
|
|
|
throw new Error(`Couldn't find the member ${member}.`)
|
|
|
|
} else {
|
|
|
|
member = tempMember
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return member.roles.remove(this.id)
|
|
|
|
}
|
2020-10-22 15:50:47 +00:00
|
|
|
}
|
2020-12-25 18:29:26 +00:00
|
|
|
|
|
|
|
export interface RoleTags {
|
|
|
|
/** The id of the bot who has this role */
|
|
|
|
botID?: string
|
|
|
|
/** Whether this is the premium subscriber role for this guild */
|
|
|
|
premiumSubscriber: boolean
|
|
|
|
/** The id of the integration this role belongs to */
|
|
|
|
integrationID?: string
|
|
|
|
}
|