diff --git a/package.json b/package.json
index 2815e2ed..5a993a80 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@fosscord/server-util",
- "version": "1.0.3",
+ "version": "1.0.4",
"description": "Utility functions for the all server repositories",
"main": "dist/index.js",
"types": "dist/index.d.ts",
diff --git a/src/models/Member.ts b/src/models/Member.ts
index 52151235..1a775629 100644
--- a/src/models/Member.ts
+++ b/src/models/Member.ts
@@ -97,6 +97,14 @@ MemberSchema.virtual("user", {
},
});
+MemberSchema.virtual("roles", {
+ ref: UserModel,
+ localField: "id",
+ foreignField: "id",
+ justOne: true,
+ autopopulate: true,
+});
+
// @ts-ignore
export const MemberModel = db.model<MemberDocument>("Member", MemberSchema, "members");
diff --git a/src/models/Webhook.ts b/src/models/Webhook.ts
new file mode 100644
index 00000000..4660686d
--- /dev/null
+++ b/src/models/Webhook.ts
@@ -0,0 +1,83 @@
+import { Schema, Document, Types } from "mongoose";
+import { transpileModule } from "typescript";
+import db from "../util/Database";
+import { ChannelModel } from "./Channel";
+import { GuildModel } from "./Guild";
+
+export interface Webhook {}
+
+export enum WebhookType {
+ Incoming = 1,
+ ChannelFollower = 2,
+}
+
+export interface WebhookDocument extends Document, Webhook {
+ id: String;
+ type: number;
+ guild_id?: string;
+ channel_id: string;
+ name?: string;
+ avatar?: string;
+ token?: string;
+ application_id?: string;
+ user_id?: string;
+ source_guild_id: string;
+}
+
+export const WebhookSchema = new Schema({
+ id: { type: String, required: true },
+ type: { type: Number, required: true },
+ guild_id: String,
+ channel_id: String,
+ name: String,
+ avatar: String,
+ token: String,
+ application_id: String,
+ user_id: String,
+ source_guild_id: String,
+ source_channel_id: String,
+});
+
+WebhookSchema.virtual("source_guild", {
+ ref: GuildModel,
+ localField: "id",
+ foreignField: "source_guild_id",
+ justOne: true,
+ autopopulate: {
+ select: {
+ icon: true,
+ id: true,
+ name: true,
+ },
+ },
+});
+
+WebhookSchema.virtual("source_channel", {
+ ref: ChannelModel,
+ localField: "id",
+ foreignField: "source_channel_id",
+ justOne: true,
+ autopopulate: {
+ select: {
+ id: true,
+ name: true,
+ },
+ },
+});
+
+WebhookSchema.virtual("source_channel", {
+ ref: ChannelModel,
+ localField: "id",
+ foreignField: "source_channel_id",
+ justOne: true,
+ autopopulate: {
+ select: {
+ id: true,
+ name: true,
+ },
+ },
+});
+
+WebhookSchema.set("removeResponse", ["source_channel_id", "source_guild_id"]);
+
+export const WebhookModel = db.model<WebhookDocument>("Webhook", WebhookSchema, "webhooks");
|