the browser-facing portion of osu!
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
2// See the LICENCE file in the repository root for full licence text.
3
4import Ruleset from './ruleset';
5
6interface UserGroupEventBase {
7 actor?: {
8 id: number;
9 name: string;
10 } | {
11 id: null;
12 name: null;
13 };
14 created_at: string;
15 group_id: number;
16 group_name: string;
17 hidden: boolean;
18 id: number;
19}
20
21interface GroupAddOrRemoveEvent extends UserGroupEventBase {
22 type: 'group_add' | 'group_remove';
23 user_id: null;
24 user_name: null;
25}
26
27interface GroupRenameEvent extends UserGroupEventBase {
28 previous_group_name: string;
29 type: 'group_rename';
30 user_id: null;
31 user_name: null;
32}
33
34interface UserAddEvent extends UserGroupEventBase {
35 playmodes: Ruleset[] | null;
36 type: 'user_add';
37 user_id: number;
38 user_name: string;
39}
40
41interface UserAddOrRemovePlaymodesEvent extends UserGroupEventBase {
42 playmodes: Ruleset[];
43 type: 'user_add_playmodes' | 'user_remove_playmodes';
44 user_id: number;
45 user_name: string;
46}
47
48interface UserRemoveOrSetDefaultEvent extends UserGroupEventBase {
49 type: 'user_remove' | 'user_set_default';
50 user_id: number;
51 user_name: string;
52}
53
54type UserGroupEventJson =
55 | GroupAddOrRemoveEvent
56 | GroupRenameEvent
57 | UserAddEvent
58 | UserAddOrRemovePlaymodesEvent
59 | UserRemoveOrSetDefaultEvent;
60
61export default UserGroupEventJson;