@@ -5,7 +5,7 @@ import { clamp } from "@/utils.js";
55import axios from "axios" ;
66import webhookConfig from "@/config/webhooks.json" with { type : "json" } ;
77import { EmitterWebhookEvent } from "@octokit/webhooks/types" ;
8-
8+ import { components } from "@octokit/openapi-types" ;
99const COLOR_MOD = 75 ;
1010const 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