Mostly working user guild settings
This commit is contained in:
parent
170d048db2
commit
544ded68a3
17505
api/assets/schemas.json
17505
api/assets/schemas.json
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,15 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { Member, UserGuildSettings } from "@fosscord/util";
|
import { Channel, ChannelOverride, Member, UserGuildSettings } from "@fosscord/util";
|
||||||
import { route } from "@fosscord/api";
|
import { route } from "@fosscord/api";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
export interface UserGuildSettingsSchema extends Partial<UserGuildSettings> { }
|
// This sucks. I would use a DeepPartial, my own or typeorms, but they both generate inncorect schema
|
||||||
|
export interface UserGuildSettingsSchema extends Partial<Omit<UserGuildSettings, 'channel_overrides'>> {
|
||||||
|
channel_overrides: {
|
||||||
|
[channel_id: string]: Partial<ChannelOverride>;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
// GET doesn't exist on discord.com
|
// GET doesn't exist on discord.com
|
||||||
router.get("/", route({}), async (req: Request, res: Response) => {
|
router.get("/", route({}), async (req: Request, res: Response) => {
|
||||||
@ -15,9 +20,15 @@ router.get("/", route({}), async (req: Request, res: Response) => {
|
|||||||
return res.json(user.settings);
|
return res.json(user.settings);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.patch("/", route({ body: "UserSettingsSchema" }), async (req: Request, res: Response) => {
|
router.patch("/", route({ body: "UserGuildSettingsSchema" }), async (req: Request, res: Response) => {
|
||||||
const body = req.body as UserGuildSettings;
|
const body = req.body as UserGuildSettings;
|
||||||
|
|
||||||
|
if (body.channel_overrides) {
|
||||||
|
for (var channel in body.channel_overrides) {
|
||||||
|
Channel.findOneOrFail({ where: { id: channel } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const user = await Member.findOneOrFail({ where: { id: req.user_id, guild_id: req.params.guild_id } });
|
const user = await Member.findOneOrFail({ where: { id: req.user_id, guild_id: req.params.guild_id } });
|
||||||
user.settings = { ...user.settings, ...body };
|
user.settings = { ...user.settings, ...body };
|
||||||
await user.save();
|
await user.save();
|
||||||
|
@ -18,6 +18,8 @@ import {
|
|||||||
PrivateSessionProjection,
|
PrivateSessionProjection,
|
||||||
MemberPrivateProjection,
|
MemberPrivateProjection,
|
||||||
PresenceUpdateEvent,
|
PresenceUpdateEvent,
|
||||||
|
DefaultUserGuildSettings,
|
||||||
|
UserGuildSettings,
|
||||||
} from "@fosscord/util";
|
} from "@fosscord/util";
|
||||||
import { Send } from "../util/Send";
|
import { Send } from "../util/Send";
|
||||||
import { CLOSECODES, OPCODES } from "../util/Constants";
|
import { CLOSECODES, OPCODES } from "../util/Constants";
|
||||||
@ -151,7 +153,16 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
|||||||
return guild;
|
return guild;
|
||||||
});
|
});
|
||||||
|
|
||||||
const user_guild_settings_entries = members.map((x) => x.settings);
|
const user_guild_settings_entries = members.map((x) => ({
|
||||||
|
...DefaultUserGuildSettings,
|
||||||
|
...x.settings,
|
||||||
|
guild_id: x.guild.id,
|
||||||
|
// disgusting
|
||||||
|
channel_overrides: Object.entries(x.settings.channel_overrides ?? {}).map(y => ({
|
||||||
|
...y[1],
|
||||||
|
channel_id: y[0],
|
||||||
|
}))
|
||||||
|
})) as any as UserGuildSettings[]; // VERY disgusting. don't care.
|
||||||
|
|
||||||
const channels = recipients.map((x) => {
|
const channels = recipients.map((x) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
@ -339,20 +339,52 @@ export class Member extends BaseClassWithoutId {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ChannelOverride {
|
||||||
|
message_notifications: number;
|
||||||
|
mute_config: MuteConfig;
|
||||||
|
muted: boolean;
|
||||||
|
channel_id: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
export interface UserGuildSettings {
|
export interface UserGuildSettings {
|
||||||
|
// channel_overrides: {
|
||||||
|
// channel_id: string;
|
||||||
|
// message_notifications: number;
|
||||||
|
// mute_config: MuteConfig;
|
||||||
|
// muted: boolean;
|
||||||
|
// }[];
|
||||||
|
|
||||||
channel_overrides: {
|
channel_overrides: {
|
||||||
channel_id: string;
|
[channel_id: string]: ChannelOverride;
|
||||||
message_notifications: number;
|
} | null,
|
||||||
mute_config: MuteConfig;
|
|
||||||
muted: boolean;
|
|
||||||
}[];
|
|
||||||
message_notifications: number;
|
message_notifications: number;
|
||||||
mobile_push: boolean;
|
mobile_push: boolean;
|
||||||
mute_config: MuteConfig;
|
mute_config: MuteConfig | null;
|
||||||
muted: boolean;
|
muted: boolean;
|
||||||
suppress_everyone: boolean;
|
suppress_everyone: boolean;
|
||||||
suppress_roles: boolean;
|
suppress_roles: boolean;
|
||||||
version: number;
|
version: number;
|
||||||
|
guild_id: string | null;
|
||||||
|
flags: number;
|
||||||
|
mute_scheduled_events: boolean;
|
||||||
|
hide_muted_channels: boolean;
|
||||||
|
notify_highlights: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DefaultUserGuildSettings: UserGuildSettings = {
|
||||||
|
channel_overrides: null,
|
||||||
|
message_notifications: 1,
|
||||||
|
flags: 0,
|
||||||
|
hide_muted_channels: false,
|
||||||
|
mobile_push: true,
|
||||||
|
mute_config: null,
|
||||||
|
mute_scheduled_events: false,
|
||||||
|
muted: false,
|
||||||
|
notify_highlights: 0,
|
||||||
|
suppress_everyone: false,
|
||||||
|
suppress_roles: false,
|
||||||
|
version: 453, // ?
|
||||||
|
guild_id: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MuteConfig {
|
export interface MuteConfig {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user