1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-22 18:32:29 +01:00

Create webhooks

This commit is contained in:
Madeline 2022-12-19 18:36:53 +11:00
parent b67ded04ef
commit 3c7efd6503
No known key found for this signature in database
GPG Key ID: 1958E017C36F2E47
5 changed files with 35 additions and 6 deletions

View File

@ -40,7 +40,7 @@ router.post(
const invite = await Invite.create({ const invite = await Invite.create({
code: random(), code: random(),
temporary: req.body.temporary, temporary: req.body.temporary || true,
uses: 0, uses: 0,
max_uses: req.body.max_uses, max_uses: req.body.max_uses,
max_age: req.body.max_age, max_age: req.body.max_age,

View File

@ -1,9 +1,10 @@
import { Router, Response, Request } from "express"; import { Router, Response, Request } from "express";
import { route } from "@fosscord/api"; import { route } from "@fosscord/api";
import { Channel, Config, trimSpecial, Webhook } from "@fosscord/util"; import { Channel, Config, handleFile, trimSpecial, User, Webhook, WebhookCreateSchema, WebhookType } from "@fosscord/util";
import { HTTPError } from "lambert-server"; import { HTTPError } from "lambert-server";
import { isTextChannel } from "./messages/index"; import { isTextChannel } from "./messages/index";
import { DiscordApiErrors } from "@fosscord/util"; import { DiscordApiErrors } from "@fosscord/util";
import crypto from "crypto";
const router: Router = Router(); const router: Router = Router();
@ -30,11 +31,32 @@ router.post(
if (webhook_count > maxWebhooks) if (webhook_count > maxWebhooks)
throw DiscordApiErrors.MAXIMUM_WEBHOOKS.withParams(maxWebhooks); throw DiscordApiErrors.MAXIMUM_WEBHOOKS.withParams(maxWebhooks);
var { avatar, name } = req.body as { name: string; avatar?: string }; var { avatar, name } = req.body as WebhookCreateSchema;
name = trimSpecial(name); name = trimSpecial(name);
if (name === "clyde") throw new HTTPError("Invalid name", 400);
// TODO: save webhook in database and send response // TODO: move this
if (name === "clyde") throw new HTTPError("Invalid name", 400);
if (name === "Fosscord Ghost") throw new HTTPError("Invalid name", 400);
if (avatar)
avatar = await handleFile(`/avatars/${channel_id}`, avatar);
const hook = Webhook.create({
type: WebhookType.Incoming,
name,
avatar,
guild_id: channel.guild_id,
channel_id: channel.id,
user_id: req.user_id,
token: crypto.randomBytes(24).toString("base64"),
});
const user = await User.getPublicUser(req.user_id);
return res.json({
...hook,
user: user,
});
}, },
); );

View File

@ -169,6 +169,12 @@ export class Channel extends BaseClass {
}) })
webhooks?: Webhook[]; webhooks?: Webhook[];
@Column()
flags: number = 0;
@Column()
default_thread_rate_limit_per_user: number = 0;
// TODO: DM channel // TODO: DM channel
static async createChannel( static async createChannel(
channel: Partial<Channel>, channel: Partial<Channel>,

View File

@ -8,6 +8,7 @@ import { User } from "./User";
export enum WebhookType { export enum WebhookType {
Incoming = 1, Incoming = 1,
ChannelFollower = 2, ChannelFollower = 2,
Application = 3,
} }
@Entity("webhooks") @Entity("webhooks")

View File

@ -4,5 +4,5 @@ export interface WebhookCreateSchema {
* @maxLength 80 * @maxLength 80
*/ */
name: string; name: string;
avatar: string; avatar?: string;
} }