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<void> {
+ 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<void> {
+ await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_excluded"`);
+ await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_weight"`);
+ }
+}
|