From b7f3535d093cc75fc665b5ffd4ed9d5b563f1aff Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 10 Feb 2026 22:26:30 +0100 Subject: Add discovery filtering --- src/api/routes/discoverable-guilds.ts | 40 ++++++++-------------- src/util/entities/Guild.ts | 6 ++++ .../1770748070808-GuildDiscoveryHoisting.ts | 15 ++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts (limited to 'src') diff --git a/src/api/routes/discoverable-guilds.ts b/src/api/routes/discoverable-guilds.ts index 8f059f57..87de37a3 100644 --- a/src/api/routes/discoverable-guilds.ts +++ b/src/api/routes/discoverable-guilds.ts @@ -44,31 +44,21 @@ router.get( select: { guild_id: true }, }).then((members) => members.map((member) => member.guild_id)) : []; - let guilds; - if (categories == undefined) { - guilds = showAllGuilds - ? await Guild.find({ - take: Math.abs(Number(limit || configLimit)), - }) - : await Guild.find({ - where: { features: Like(`%DISCOVERABLE%`) }, - take: Math.abs(Number(limit || configLimit)), - }); - } else { - guilds = showAllGuilds - ? await Guild.find({ - where: { primary_category_id: categories.toString(), id: Not(In(hiddenGuildIds)) }, - take: Math.abs(Number(limit || configLimit)), - }) - : await Guild.find({ - where: { - primary_category_id: categories.toString(), - features: Like("%DISCOVERABLE%"), - id: Not(In(hiddenGuildIds)), - }, - take: Math.abs(Number(limit || configLimit)), - }); - } + + const guilds = await Guild.find({ + where: { + id: Not(In(hiddenGuildIds)), + discovery_excluded: false, + ...(categories == undefined ? {} : { primary_category_id: categories.toString() }), // TODO: isnt this an array? + ...(showAllGuilds ? {} : { features: Like("%DISCOVERABLE%") }), + }, + order: { + discovery_weight: "DESC", + member_count: "DESC", + }, + skip: Math.abs(Number(offset || Config.get().guild.discovery.offset)), + take: Math.abs(Number(limit || configLimit)), + }); const total = guilds ? guilds.length : undefined; diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts index 56740ab5..aac3daf0 100644 --- a/src/util/entities/Guild.ts +++ b/src/util/entities/Guild.ts @@ -298,6 +298,12 @@ export class Guild extends BaseClass { @Column({ select: false, type: "simple-array" }) channel_ordering: string[]; + @Column() + discovery_weight: number = 0; + + @Column() + discovery_excluded: boolean = false; + static async createGuild(body: { name?: string; icon?: string | null; diff --git a/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts b/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts new file mode 100644 index 00000000..de878388 --- /dev/null +++ b/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class GuildDiscoveryHoisting1770748070808 implements MigrationInterface { + name = "GuildDiscoveryHoisting1770748070808"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_weight" integer NOT NULL`); + await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_excluded" boolean NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_excluded"`); + await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_weight"`); + } +} -- cgit 1.5.1