More relations
This commit is contained in:
parent
2f1b131b0f
commit
b6cfb32d5a
@ -45,13 +45,7 @@ import {
|
||||
import { Request, Response, Router } from "express";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import multer from "multer";
|
||||
import {
|
||||
FindManyOptions,
|
||||
FindOperator,
|
||||
LessThan,
|
||||
MoreThan,
|
||||
MoreThanOrEqual,
|
||||
} from "typeorm";
|
||||
import { FindManyOptions, FindOperator, LessThan, MoreThan, MoreThanOrEqual } from "typeorm";
|
||||
import { URL } from "url";
|
||||
import fetch from "node-fetch-commonjs";
|
||||
import { CloudAttachment } from "../../../../../util/entities/CloudAttachment";
|
||||
@ -75,8 +69,7 @@ router.get(
|
||||
},
|
||||
limit: {
|
||||
type: "number",
|
||||
description:
|
||||
"max number of messages to return (1-100). defaults to 50",
|
||||
description: "max number of messages to return (1-100). defaults to 50",
|
||||
},
|
||||
},
|
||||
responses: {
|
||||
@ -102,14 +95,9 @@ router.get(
|
||||
const before = req.query.before ? `${req.query.before}` : undefined;
|
||||
const after = req.query.after ? `${req.query.after}` : undefined;
|
||||
const limit = Number(req.query.limit) || 50;
|
||||
if (limit < 1 || limit > 100)
|
||||
throw new HTTPError("limit must be between 1 and 100", 422);
|
||||
if (limit < 1 || limit > 100) throw new HTTPError("limit must be between 1 and 100", 422);
|
||||
|
||||
const permissions = await getPermission(
|
||||
req.user_id,
|
||||
channel.guild_id,
|
||||
channel_id,
|
||||
);
|
||||
const permissions = await getPermission(req.user_id, channel.guild_id, channel_id);
|
||||
permissions.hasThrow("VIEW_CHANNEL");
|
||||
if (!permissions.has("READ_MESSAGE_HISTORY")) return res.json([]);
|
||||
|
||||
@ -131,6 +119,8 @@ router.get(
|
||||
"referenced_message",
|
||||
"referenced_message.author",
|
||||
"referenced_message.mentions",
|
||||
"referenced_message.mention_roles",
|
||||
"referenced_message.mention_channels",
|
||||
],
|
||||
};
|
||||
|
||||
@ -151,9 +141,7 @@ router.get(
|
||||
}),
|
||||
]);
|
||||
left.push(...right);
|
||||
messages = left.sort(
|
||||
(a, b) => a.timestamp.getTime() - b.timestamp.getTime(),
|
||||
);
|
||||
messages = left.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
||||
} else {
|
||||
query.take = 1;
|
||||
const message = await Message.findOne({
|
||||
@ -164,20 +152,12 @@ router.get(
|
||||
}
|
||||
} else {
|
||||
if (after) {
|
||||
if (BigInt(after) > BigInt(Snowflake.generate()))
|
||||
throw new HTTPError(
|
||||
"after parameter must not be greater than current time",
|
||||
422,
|
||||
);
|
||||
if (BigInt(after) > BigInt(Snowflake.generate())) throw new HTTPError("after parameter must not be greater than current time", 422);
|
||||
|
||||
query.where.id = MoreThan(after);
|
||||
query.order = { timestamp: "ASC" };
|
||||
} else if (before) {
|
||||
if (BigInt(before) > BigInt(Snowflake.generate()))
|
||||
throw new HTTPError(
|
||||
"before parameter must not be greater than current time",
|
||||
422,
|
||||
);
|
||||
if (BigInt(before) > BigInt(Snowflake.generate())) throw new HTTPError("before parameter must not be greater than current time", 422);
|
||||
|
||||
query.where.id = LessThan(before);
|
||||
}
|
||||
@ -205,9 +185,7 @@ router.get(
|
||||
});
|
||||
x.attachments?.forEach((y: Attachment) => {
|
||||
// dynamically set attachment proxy_url in case the endpoint changed
|
||||
const uri = y.proxy_url.startsWith("http")
|
||||
? y.proxy_url
|
||||
: `https://example.org${y.proxy_url}`;
|
||||
const uri = y.proxy_url.startsWith("http") ? y.proxy_url : `https://example.org${y.proxy_url}`;
|
||||
|
||||
const url = new URL(uri);
|
||||
if (endpoint) {
|
||||
@ -310,10 +288,7 @@ router.post(
|
||||
relations: ["recipients", "recipients.user"],
|
||||
});
|
||||
if (!channel.isWritable()) {
|
||||
throw new HTTPError(
|
||||
`Cannot send messages to channel of type ${channel.type}`,
|
||||
400,
|
||||
);
|
||||
throw new HTTPError(`Cannot send messages to channel of type ${channel.type}`, 400);
|
||||
}
|
||||
|
||||
if (body.nonce) {
|
||||
@ -335,12 +310,7 @@ router.post(
|
||||
const count = await Message.count({
|
||||
where: {
|
||||
channel_id,
|
||||
timestamp: MoreThan(
|
||||
new Date(
|
||||
Date.now() -
|
||||
limits.absoluteRate.sendMessage.window,
|
||||
),
|
||||
),
|
||||
timestamp: MoreThan(new Date(Date.now() - limits.absoluteRate.sendMessage.window)),
|
||||
},
|
||||
});
|
||||
|
||||
@ -357,13 +327,8 @@ router.post(
|
||||
const files = (req.files as Express.Multer.File[]) ?? [];
|
||||
for (const currFile of files) {
|
||||
try {
|
||||
const file = await uploadFile(
|
||||
`/attachments/${channel.id}`,
|
||||
currFile,
|
||||
);
|
||||
attachments.push(
|
||||
Attachment.create({ ...file, proxy_url: file.url }),
|
||||
);
|
||||
const file = await uploadFile(`/attachments/${channel.id}`, currFile);
|
||||
attachments.push(Attachment.create({ ...file, proxy_url: file.url }));
|
||||
} catch (error) {
|
||||
return res.status(400).json({ message: error?.toString() });
|
||||
}
|
||||
@ -400,9 +365,7 @@ router.post(
|
||||
recipient.save(),
|
||||
emitEvent({
|
||||
event: "CHANNEL_CREATE",
|
||||
data: channel_dto.excludedRecipients([
|
||||
recipient.user_id,
|
||||
]),
|
||||
data: channel_dto.excludedRecipients([recipient.user_id]),
|
||||
user_id: recipient.user_id,
|
||||
}),
|
||||
]);
|
||||
@ -423,16 +386,13 @@ router.post(
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
//@ts-ignore
|
||||
message.member.roles = message.member.roles
|
||||
.filter((x) => x.id != x.guild_id)
|
||||
.map((x) => x.id);
|
||||
message.member.roles = message.member.roles.filter((x) => x.id != x.guild_id).map((x) => x.id);
|
||||
}
|
||||
|
||||
let read_state = await ReadState.findOne({
|
||||
where: { user_id: req.user_id, channel_id },
|
||||
});
|
||||
if (!read_state)
|
||||
read_state = ReadState.create({ user_id: req.user_id, channel_id });
|
||||
if (!read_state) read_state = ReadState.create({ user_id: req.user_id, channel_id });
|
||||
read_state.last_message_id = message.id;
|
||||
|
||||
await Promise.all([
|
||||
@ -443,19 +403,12 @@ router.post(
|
||||
channel_id: channel_id,
|
||||
data: message,
|
||||
} as MessageCreateEvent),
|
||||
message.guild_id
|
||||
? Member.update(
|
||||
{ id: req.user_id, guild_id: message.guild_id },
|
||||
{ last_message_id: message.id },
|
||||
)
|
||||
: null,
|
||||
message.guild_id ? Member.update({ id: req.user_id, guild_id: message.guild_id }, { last_message_id: message.id }) : null,
|
||||
channel.save(),
|
||||
]);
|
||||
|
||||
// no await as it shouldnt block the message send function and silently catch error
|
||||
postHandleMessage(message).catch((e) =>
|
||||
console.error("[Message] post-message handler failed", e),
|
||||
);
|
||||
postHandleMessage(message).catch((e) => console.error("[Message] post-message handler failed", e));
|
||||
|
||||
return res.json(
|
||||
message.withSignedAttachments(
|
||||
|
||||
@ -227,6 +227,7 @@ export async function handleMessage(opts: MessageOptions): Promise<Message> {
|
||||
where: {
|
||||
id: opts.message_reference.message_id,
|
||||
},
|
||||
relations: ["author", "mentions", "mention_roles", "mention_channels"],
|
||||
});
|
||||
|
||||
if (message.referenced_message.channel_id !== opts.message_reference.channel_id) throw new HTTPError("Referenced message not found in the specified channel", 404);
|
||||
|
||||
Reference in New Issue
Block a user