73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import { prisma } from "@repo/db";
|
|
import { Embed, EmbedBuilder } from "discord.js";
|
|
import { Router } from "express";
|
|
import client from "modules/discord";
|
|
|
|
if (!process.env.DISCORD_REPORT_CHANNEL)
|
|
throw new Error("DISCORD_REPORT_CHANNEL environment variable is not set.");
|
|
|
|
const router: Router = Router();
|
|
|
|
router.post("/admin-embed", async (req, res) => {
|
|
try {
|
|
const { reportId } = req.body;
|
|
if (!reportId) {
|
|
res.status(400).json({ error: "reportId is required" });
|
|
return;
|
|
}
|
|
const report = await prisma.report.findUnique({
|
|
where: {
|
|
id: Number(reportId),
|
|
},
|
|
include: {
|
|
Reported: true,
|
|
Sender: true,
|
|
},
|
|
});
|
|
|
|
if (!report) {
|
|
res.status(404).json({ error: "Report not found" });
|
|
return;
|
|
}
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setTitle(`Report #${report.id}`)
|
|
.setURL(`${process.env.NEXT_PUBLIC_HUB_URL}/admin/report/${report.id}`)
|
|
.setDescription(report.text)
|
|
.addFields(
|
|
{
|
|
name: "gemeldeter Nutzer",
|
|
value: `${report.Reported?.firstname} ${report.Reported?.lastname} (${report.Reported?.publicId})`,
|
|
inline: true,
|
|
},
|
|
{ name: "angemeldet als", value: report.reportedUserRole, inline: true },
|
|
{
|
|
name: "gemeldet von",
|
|
value: `${report.Sender?.firstname} ${report.Sender?.lastname} (${report.Sender?.publicId})`,
|
|
},
|
|
)
|
|
.setFooter({
|
|
text: "Bitte reagiere mit 🫡, wenn du den Report bearbeitet hast, oder mit ✅, wenn er abgeschlossen ist.",
|
|
})
|
|
.setTimestamp(new Date(report.timestamp))
|
|
.setColor("DarkRed");
|
|
|
|
const reportsChannel = await client.channels.fetch(process.env.DISCORD_REPORT_CHANNEL!);
|
|
if (!reportsChannel || !reportsChannel.isSendable()) {
|
|
res.status(500).json({ error: "Reports channel not found or is not a text channel" });
|
|
return;
|
|
}
|
|
const message = await reportsChannel.send({ embeds: [embed] });
|
|
message.react("🫡").catch(console.error);
|
|
message.react("✅").catch(console.error);
|
|
res.json({
|
|
message: "Report embed sent to Discord channel",
|
|
});
|
|
} catch (error) {
|
|
console.error("Error sending report embed:", error);
|
|
res.status(500).json({ error: "Failed to send report embed" });
|
|
}
|
|
});
|
|
|
|
export default router;
|