summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--api/scripts/droptables.sql2
-rw-r--r--api/src/routes/guilds/#guild_id/members/#member_id/index.ts8
-rw-r--r--api/src/routes/guilds/index.ts8
-rw-r--r--gateway/src/opcodes/LazyRequest.ts4
-rw-r--r--util/src/entities/Member.ts31
-rw-r--r--util/src/interfaces/Event.ts11
6 files changed, 43 insertions, 21 deletions
diff --git a/api/scripts/droptables.sql b/api/scripts/droptables.sql

index 2a9fd3ad..cabb9f31 100644 --- a/api/scripts/droptables.sql +++ b/api/scripts/droptables.sql
@@ -2,7 +2,6 @@ DROP TABLE applications; DROP TABLE attachments; DROP TABLE audit_logs; DROP TABLE bans; -DROP TABLE channels; DROP TABLE connected_accounts; DROP TABLE emojis; DROP TABLE invites; @@ -24,6 +23,7 @@ DROP TABLE teams; DROP TABLE templates; DROP TABLE voice_states; DROP TABLE webhooks; +DROP TABLE channels; DROP TABLE members; DROP TABLE guilds; -- DROP TABLE users; diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts
index aef1c6dc..66c508a2 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts
@@ -30,18 +30,14 @@ router.patch("/", check(MemberChangeSchema), async (req: Request, res: Response) const { guild_id, member_id } = req.params; const body = req.body as MemberChangeSchema; + const member = await Member.findOneOrFail({ where: { id: member_id, guild_id }, relations: ["roles", "user"] }); const permission = await getPermission(req.user_id, guild_id); if (body.roles) { permission.hasThrow("MANAGE_ROLES"); - - const roles = await Role.find({ id: In(body.roles) }); - if (body.roles.length !== roles.length) throw new HTTPError("Roles not found", 404); + member.roles = body.roles.map((x) => new Role({ id: x })); // foreign key constraint will fail if role doesn't exist } - const member = await Member.findOneOrFail({ id: member_id, guild_id }); - member.assign(req.body); - Promise.all([ member.save(), emitEvent({ diff --git a/api/src/routes/guilds/index.ts b/api/src/routes/guilds/index.ts
index 51dcf96a..b4f6b3d2 100644 --- a/api/src/routes/guilds/index.ts +++ b/api/src/routes/guilds/index.ts
@@ -20,7 +20,7 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = const guild_id = Snowflake.generate(); - const guild = await new Guild({ + await Guild.insert({ name: body.name, region: Config.get().regions.default, owner_id: req.user_id, @@ -47,10 +47,10 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = welcome_channels: [] }, widget_enabled: false - }).save(); + }); // we have to create the role _after_ the guild because else we would get a "SQLITE_CONSTRAINT: FOREIGN KEY constraint failed" error - const role = await new Role({ + await Role.insert({ id: guild_id, guild_id: guild_id, color: 0, @@ -60,7 +60,7 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = name: "@everyone", permissions: String("2251804225"), position: 0 - }).save(); + }); if (!body.channels || !body.channels.length) body.channels = [{ id: "01", type: 0, name: "general" }]; diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts
index e035e6bb..b7ee9a96 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts
@@ -33,7 +33,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { const roles = await Role.find({ where: { guild_id: guild_id }, order: { - position: "ASC", + position: "DESC", }, }); @@ -47,7 +47,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { ); const group = { count: role_members.length, - id: role.id === guild_id ? "online" : role.name, + id: role.id === guild_id ? "online" : role.id, }; items.push({ group }); diff --git a/util/src/entities/Member.ts b/util/src/entities/Member.ts
index ae60f4e2..76febb50 100644 --- a/util/src/entities/Member.ts +++ b/util/src/entities/Member.ts
@@ -54,13 +54,14 @@ export class Member extends BaseClassWithoutId { @JoinTable({ name: "member_roles", - joinColumn: { name: "id", referencedColumnName: "index" }, + + joinColumn: { name: "index", referencedColumnName: "index" }, inverseJoinColumn: { name: "role_id", referencedColumnName: "id", }, }) - @ManyToMany(() => Role) + @ManyToMany(() => Role, { cascade: true }) roles: Role[]; @Column() @@ -208,7 +209,7 @@ export class Member extends BaseClassWithoutId { where: { id: guild_id, }, - relations: ["channels", "emojis", "members", "roles", "stickers"], + relations: ["channels", "emojis", "members", "roles", "stickers", "voice_states"], }); if (await Member.count({ id: user.id, guild: { id: guild_id } })) @@ -225,11 +226,9 @@ export class Member extends BaseClassWithoutId { mute: false, pending: false, }; - // @ts-ignore - guild.joined_at = member.joined_at.toISOString(); await Promise.all([ - Member.insert({ + new Member({ ...member, roles: [new Role({ id: guild_id })], // read_state: {}, @@ -242,7 +241,8 @@ export class Member extends BaseClassWithoutId { suppress_roles: false, version: 0, }, - }), + // Member.save is needed because else the roles relations wouldn't be updated + }).save(), Guild.increment({ id: guild_id }, "member_count", 1), emitEvent({ event: "GUILD_MEMBER_ADD", @@ -255,7 +255,22 @@ export class Member extends BaseClassWithoutId { } as GuildMemberAddEvent), emitEvent({ event: "GUILD_CREATE", - data: { ...guild, members: [...guild.members, { ...member, user }] }, + data: { + ...guild, + members: [...guild.members, { ...member, user }], + member_count: (guild.member_count || 0) + 1, + guild_hashes: { + channels: { omitted: false, hash: "nkMQJ5nl5Cg" }, + metadata: { omitted: false, hash: "+5ybMfcb8iw" }, + roles: { omitted: false, hash: "Idhc6P9ktfM" }, + version: 1, + }, + guild_scheduled_events: [], + joined_at: member.joined_at, + presences: [], + stage_instances: [], + threads: [], + }, user_id, } as GuildCreateEvent), ]); diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts
index 7ea1bd49..acaa822e 100644 --- a/util/src/interfaces/Event.ts +++ b/util/src/interfaces/Event.ts
@@ -125,6 +125,17 @@ export interface GuildCreateEvent extends Event { event: "GUILD_CREATE"; data: Guild & { joined_at: Date; + // TODO: add them to guild + guild_scheduled_events: never[]; + guild_hashes: { + channels: { omitted: boolean; hash: string }; + metadata: { omitted: boolean; hash: string }; + roles: { omitted: boolean; hash: string }; + version: number; + }; + presences: never[]; + stage_instances: never[]; + threads: never[]; }; }