Skip to content

Commit 9f232de

Browse files
Techbot121Meta Construct
authored andcommitted
add chatsoundPullrequestHandler
1 parent 8620b21 commit 9f232de

File tree

1 file changed

+75
-10
lines changed

1 file changed

+75
-10
lines changed

app/services/discord/modules/webhook-handler.ts

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { clamp } from "@/utils.js";
55
import axios from "axios";
66
import webhookConfig from "@/config/webhooks.json" with { type: "json" };
77
import { EmitterWebhookEvent } from "@octokit/webhooks/types";
8-
8+
import { components } from "@octokit/openapi-types";
99
const COLOR_MOD = 75;
1010
const COLOR_BASE = 50;
1111

@@ -263,7 +263,7 @@ export default async (bot: DiscordBot): Promise<void> => {
263263
}
264264
});
265265

266-
async function DefaultHandler(event: EmitterWebhookEvent<"push">) {
266+
async function DefaultPushHandler(event: EmitterWebhookEvent<"push">) {
267267
const payload = event.payload;
268268
const repo = payload.repository;
269269
const serverOverride = REPO_SERVER_MAP.get(repo.name);
@@ -486,7 +486,10 @@ export default async (bot: DiscordBot): Promise<void> => {
486486
}, new Map<string, string[]>());
487487
}
488488

489-
async function ChatsoundsHandler(event: EmitterWebhookEvent<"push">) {
489+
const formatSounds = ([folderName, sounds]) =>
490+
`[**${folderName}**](https://github.com/Metastruct/garrysmod-chatsounds/tree/master/sound/chatsounds/autoadd/${folderName})\n${[...new Set(sounds)].map(s => `- \`${s}\``).join("\n")}`;
491+
492+
async function ChatsoundsPushHandler(event: EmitterWebhookEvent<"push">) {
490493
const payload = event.payload;
491494
const commits = payload.commits;
492495

@@ -515,9 +518,6 @@ export default async (bot: DiscordBot): Promise<void> => {
515518
const removedSounds = GroupSoundFilesByFolder(commit.removed ?? []);
516519
const modifiedSounds = GroupSoundFilesByFolder(commit.modified ?? []);
517520

518-
const formatSounds = ([folderName, sounds]) =>
519-
`[**${folderName}**](${payload.repository.html_url}/tree/master/sound/chatsounds/autoadd/${folderName})\n${[...new Set(sounds)].map(s => `- \`${s}\``).join("\n")}`;
520-
521521
// maybe there is a better way instead of if-chaining this but whatever
522522
if (commit.added && addedSounds.size > 0) {
523523
container.addTextDisplayComponents({
@@ -560,19 +560,84 @@ export default async (bot: DiscordBot): Promise<void> => {
560560
content: `-# added by ${commit.author.username ?? commit.author.name} via \`${commit.message.split("\n\n")[0]}\`, approved by ${payload.pusher.username ?? payload.pusher.name}`,
561561
});
562562
}
563-
webhook.send({ components: [container], flags: Discord.MessageFlags.IsComponentsV2 });
564-
chatWebhook.send({ components: [container], flags: Discord.MessageFlags.IsComponentsV2 });
563+
webhook.send({
564+
username: payload.sender?.name ?? payload.sender?.login ?? "unknown",
565+
avatarURL: payload.sender?.avatar_url,
566+
components: [container],
567+
flags: Discord.MessageFlags.IsComponentsV2,
568+
});
569+
chatWebhook.send({
570+
username: payload.sender?.name ?? payload.sender?.login ?? "unknown",
571+
avatarURL: payload.sender?.avatar_url,
572+
components: [container],
573+
flags: Discord.MessageFlags.IsComponentsV2,
574+
});
565575
}
566576

567577
GitHub.on("push", async event => {
568578
if (!webhook) return;
569579
switch (event.payload.repository.name) {
570580
case "garrysmod-chatsounds":
571-
ChatsoundsHandler(event);
581+
ChatsoundsPushHandler(event);
582+
break;
583+
584+
default:
585+
DefaultPushHandler(event);
586+
break;
587+
}
588+
});
589+
590+
async function ChatsoundsPullrequestOpenedHandler(
591+
event: EmitterWebhookEvent<"pull_request.opened">
592+
) {
593+
const payload = event.payload;
594+
595+
const diff = await axios.get<components["schemas"]["diff-entry"][]>(
596+
event.payload.pull_request.url + "/files"
597+
); // why this isn't in the payload I have no idea
598+
599+
const changedFiles = GroupSoundFilesByFolder(diff.data.map(d => d.filename));
600+
601+
const container = new Discord.ContainerBuilder();
602+
603+
container.setAccentColor(payload.pull_request.state === "open" ? 5763719 : 15277667);
604+
605+
container.addTextDisplayComponents({
606+
type: Discord.ComponentType.TextDisplay,
607+
content: `# [Chatsound Request \`#${payload.number} ${payload.pull_request.title}\`](${payload.pull_request.html_url})`,
608+
});
609+
610+
container.addSeparatorComponents(DefaultSeparator);
611+
612+
container.addTextDisplayComponents({
613+
type: Discord.ComponentType.TextDisplay,
614+
content: `### [${payload.sender.login}](${payload.sender.html_url}) wants to add/change ${payload.pull_request.changed_files} sounds:\n${Array.from(
615+
changedFiles
616+
)
617+
.map(formatSounds)
618+
.join("\n\n")}`,
619+
});
620+
621+
webhook.send({
622+
username: payload.sender.name ?? payload.sender.login ?? "unknown",
623+
avatarURL: payload.sender.avatar_url,
624+
components: [container],
625+
flags: Discord.MessageFlags.IsComponentsV2,
626+
});
627+
}
628+
629+
GitHub.on("pull_request", async event => {
630+
if (!webhook) return;
631+
switch (event.payload.repository.name) {
632+
case "garrysmod-chatsounds":
633+
if (event.payload.action === "opened")
634+
ChatsoundsPullrequestOpenedHandler(
635+
event as EmitterWebhookEvent<"pull_request.opened">
636+
);
572637
break;
573638

574639
default:
575-
DefaultHandler(event);
640+
// todo lol
576641
break;
577642
}
578643
});

0 commit comments

Comments
 (0)