diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/api/routes/channels/#channel_id/invites.ts | 18 | ||||
-rw-r--r-- | src/util/entities/Invite.ts | 9 | ||||
-rw-r--r-- | src/util/schemas/InviteCreateSchema.ts | 1 |
3 files changed, 20 insertions, 8 deletions
diff --git a/src/api/routes/channels/#channel_id/invites.ts b/src/api/routes/channels/#channel_id/invites.ts index b02f65d3..ae32e80d 100644 --- a/src/api/routes/channels/#channel_id/invites.ts +++ b/src/api/routes/channels/#channel_id/invites.ts @@ -22,6 +22,7 @@ import { Guild, Invite, InviteCreateEvent, + InviteCreateSchema, PublicInviteRelation, User, emitEvent, @@ -50,6 +51,7 @@ router.post( }), async (req: Request, res: Response) => { const { user_id } = req; + const body = req.body as InviteCreateSchema; const { channel_id } = req.params; const channel = await Channel.findOneOrFail({ where: { id: channel_id }, @@ -62,22 +64,27 @@ router.post( } const { guild_id } = channel; - const expires_at = new Date(req.body.max_age * 1000 + Date.now()); + const expires_at = + body.max_age == 0 || body.max_age == undefined + ? undefined + : new Date(body.max_age * 1000 + Date.now()); const invite = await Invite.create({ code: random(), - temporary: req.body.temporary || true, + temporary: body.temporary || true, uses: 0, - max_uses: req.body.max_uses, - max_age: req.body.max_age, + max_uses: body.max_uses ? Math.max(0, body.max_uses) : 0, + max_age: body.max_age ? Math.max(0, body.max_age) : 0, expires_at, created_at: new Date(), guild_id, channel_id: channel_id, inviter_id: user_id, + flags: body.flags ?? 0, }).save(); + const data = invite.toJSON(); - data.inviter = await User.getPublicUser(req.user_id); + data.inviter = (await User.getPublicUser(req.user_id)).toPublicUser(); data.guild = await Guild.findOne({ where: { id: guild_id } }); data.channel = channel; @@ -86,6 +93,7 @@ router.post( data, guild_id, } as InviteCreateEvent); + res.status(201).send(data); }, ); diff --git a/src/util/entities/Invite.ts b/src/util/entities/Invite.ts index 3019709f..7970c4f0 100644 --- a/src/util/entities/Invite.ts +++ b/src/util/entities/Invite.ts @@ -17,10 +17,10 @@ */ import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm"; -import { Member } from "./Member"; import { BaseClassWithoutId, PrimaryIdColumn } from "./BaseClass"; import { Channel } from "./Channel"; import { Guild } from "./Guild"; +import { Member } from "./Member"; import { User } from "./User"; export const PublicInviteRelation = ["inviter", "guild", "channel"]; @@ -45,8 +45,8 @@ export class Invite extends BaseClassWithoutId { @Column() created_at: Date; - @Column() - expires_at: Date; + @Column({ nullable: true }) + expires_at?: Date; @Column({ nullable: true }) @RelationId((invite: Invite) => invite.guild) @@ -94,6 +94,9 @@ export class Invite extends BaseClassWithoutId { @Column({ nullable: true }) vanity_url?: boolean; + @Column() + flags: number; + static async joinGuild(user_id: string, code: string) { const invite = await Invite.findOneOrFail({ where: { code } }); if (invite.uses++ >= invite.max_uses && invite.max_uses !== 0) diff --git a/src/util/schemas/InviteCreateSchema.ts b/src/util/schemas/InviteCreateSchema.ts index 6cdc0214..92333e77 100644 --- a/src/util/schemas/InviteCreateSchema.ts +++ b/src/util/schemas/InviteCreateSchema.ts @@ -26,4 +26,5 @@ export interface InviteCreateSchema { unique?: boolean; target_user?: string; target_user_type?: number; + flags?: number; } |