summary refs log tree commit diff
path: root/src/schemas/api/guilds/Role.ts
blob: fd3440e6fc6d17d6352f9a6cd4509c9acab0ef5b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
	Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
	Copyright (C) 2026 Spacebar and Spacebar Contributors

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Affero General Public License as published
	by the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Affero General Public License for more details.

	You should have received a copy of the GNU Affero General Public License
	along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

import { Snowflake } from "../../Identifiers";

export interface RoleResponse {
    id: Snowflake;
    name: string;
    description: string | null;
    // @deprecated
    color: number;
    colors: RoleColors;
    hoist: boolean;
    icon?: string | null;
    unicode_emoji?: string | null;
    position: number;
    // @format number
    permissions: string;
    managed: boolean;
    mentionable: boolean;
    flags?: number;
    tags?: RoleTags; // unused currently
}

export type RoleListResponse = RoleResponse[];

export class RoleColors {
    primary_color: number;
    secondary_color: number | undefined; // only used for "holographic" and "gradient" styles
    tertiary_color?: number | undefined; // only used for "holographic" style

    toJSON(): RoleColors {
        return {
            ...this,
            secondary_color: this.secondary_color ?? undefined,
            tertiary_color: this.tertiary_color ?? undefined,
        };
    }
}

export class RoleTags {
    bot_id?: Snowflake;
    integration_id?: Snowflake;
    subscription_listing_id?: Snowflake;
    // ??? https://github.com/discord-userdoccers/discord-userdoccers/issues/576 - in other words, types are currently unknown
    premium_subscriber?: boolean | null;
    available_for_purchase?: boolean | null;
    guild_connections?: boolean | null;

    toJSON(): RoleTags {
        return {
            ...this,
            // "forward compatibility"
            premium_subscriber: this.premium_subscriber ? null : undefined,
            available_for_purchase: this.available_for_purchase ? null : undefined,
            guild_connections: this.subscription_listing_id ? null : undefined,
        };
    }
}