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;
}
|