Skip to content

Commit

Permalink
Merge pull request #542 from mchangrh/warning-webhook
Browse files Browse the repository at this point in the history
add warning webhook
  • Loading branch information
ajayyy authored Feb 22, 2023
2 parents df279cf + 76ce101 commit f4286b1
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/routes/postWarning.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { isUserVIP } from "../utils/isUserVIP";
import { getHashCache } from "../utils/getHashCache";
import { HashedUserID, UserID } from "../types/user.model";
import { config } from "../config";
import { generateWarningDiscord, warningData, dispatchEvent } from "../utils/webhookUtils";

type warningEntry = {
userID: HashedUserID,
Expand All @@ -21,6 +22,8 @@ function checkExpiredWarning(warning: warningEntry): boolean {
return warning.issueTime > expiry && !warning.enabled;
}

const getUsername = (userID: HashedUserID) => db.prepare("get", `SELECT "userName" FROM "userNames" WHERE "userID" = ?`, [userID], { useReplica: true });

export async function postWarning(req: Request, res: Response): Promise<Response> {
if (!req.body.userID) return res.status(400).json({ "message": "Missing parameters" });

Expand Down Expand Up @@ -62,6 +65,27 @@ export async function postWarning(req: Request, res: Response): Promise<Response
resultStatus = "removed from";
}

const targetUsername = await getUsername(userID) ?? null;
const issuerUsername = await getUsername(issuerUserID) ?? null;
const webhookData = {
target: {
userID,
username: targetUsername
},
issuer: {
userID: issuerUserID,
username: issuerUsername
},
reason
} as warningData;

try {
const warning = generateWarningDiscord(webhookData);
dispatchEvent("warning", warning);
} catch /* istanbul ignore next */ (err) {
Logger.error(`Error sending warning to Discord ${err}`);
}

return res.status(200).json({
message: `Warning ${resultStatus} user '${userID}'.`,
});
Expand Down
28 changes: 28 additions & 0 deletions src/utils/webhookUtils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { config } from "../config";
import { Logger } from "../utils/logger";
import axios from "axios";
import { HashedUserID } from "../types/user.model";

function getVoteAuthorRaw(submissionCount: number, isTempVIP: boolean, isVIP: boolean, isOwnSubmission: boolean): string {
if (isOwnSubmission) {
Expand Down Expand Up @@ -57,8 +58,35 @@ function dispatchEvent(scope: string, data: Record<string, unknown>): void {
}
}

interface warningData {
target: {
userID: HashedUserID
username: string | null
},
issuer: {
userID: HashedUserID,
username: string | null
},
reason: string
}

function generateWarningDiscord(data: warningData) {
return {
embeds: [
{
title: "Warning",
description: `**User:** ${data.target.username} (${data.target.userID})\n**Issuer:** ${data.issuer.username} (${data.issuer.userID})\n**Reason:** ${data.reason}`,
color: 0xff0000,
timestamp: new Date().toISOString()
}
]
};
}

export {
getVoteAuthorRaw,
getVoteAuthor,
dispatchEvent,
generateWarningDiscord,
warningData
};
6 changes: 6 additions & 0 deletions test.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@
"vote.up",
"vote.down"
]
}, {
"url": "http://127.0.0.1:8081/WarningWebhook",
"key": "superSecretKey",
"scopes": [
"warning"
]
}
],
"maxNumberOfActiveWarnings": 3,
Expand Down
4 changes: 4 additions & 0 deletions test/mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ app.post("/webhook/FirstTimeSubmissions", (req, res) => {
res.sendStatus(200);
});

app.post("/webhook/WarningWebhook", (req, res) => {
res.sendStatus(200);
});

app.post("/webhook/CompletelyIncorrectReport", (req, res) => {
res.sendStatus(200);
});
Expand Down

0 comments on commit f4286b1

Please sign in to comment.