generated from nhcarrigan/template
fix: send webhook milestone notifications silently (#45)
## Summary - Adds `flags: 4096` (`MessageFlags.SUPPRESS_NOTIFICATIONS`) to the Discord webhook payload in `postMilestoneWebhook` - Milestone announcements (prestige, transcendence, apotheosis) will now appear in the channel without triggering desktop or mobile push notifications - Defines the magic number as a documented `suppressNotifications` constant for self-documentation - Updates the webhook test to assert `flags: 4096` is present in the outgoing payload Closes #41 ## Test plan - [ ] Lint passes: `pnpm lint` - [ ] Build passes: `pnpm build` - [ ] Tests pass with 100% coverage: `pnpm test` - [ ] Trigger a prestige/transcendence/apotheosis in-game and verify the Discord webhook message arrives without pinging anyone ✨ This issue was created with help from Hikari~ 🌸 Reviewed-on: #45 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #45.
This commit is contained in:
@@ -9,6 +9,12 @@ import { logger } from "./logger.js";
|
||||
|
||||
const discordApi = "https://discord.com/api/v10";
|
||||
|
||||
/**
|
||||
* Discord MessageFlags.SUPPRESS_NOTIFICATIONS — messages are delivered without
|
||||
* triggering desktop or mobile push notifications.
|
||||
*/
|
||||
const suppressNotifications = 4096;
|
||||
|
||||
/**
|
||||
* Grants the apotheosis Discord role to the given player if configured.
|
||||
* Fails silently so role grant errors do not affect the game action.
|
||||
@@ -85,7 +91,10 @@ const postMilestoneWebhook = async(
|
||||
|
||||
try {
|
||||
await fetch(webhookUrl, {
|
||||
body: JSON.stringify({ content }),
|
||||
body: JSON.stringify({
|
||||
content: content,
|
||||
flags: suppressNotifications,
|
||||
}),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
method: "POST",
|
||||
});
|
||||
|
||||
@@ -97,9 +97,10 @@ describe("webhook service", () => {
|
||||
await postMilestoneWebhook("user123", "prestige", counts);
|
||||
const [url, options] = mockFetch.mock.calls[0] as [string, RequestInit];
|
||||
expect(url).toBe("https://discord.com/webhook/abc");
|
||||
const body = JSON.parse(options.body as string) as { content: string };
|
||||
const body = JSON.parse(options.body as string) as { content: string; flags: number };
|
||||
expect(body.content).toContain("<@user123>");
|
||||
expect(body.content).toContain("prestiged");
|
||||
expect(body.flags).toBe(4096);
|
||||
});
|
||||
|
||||
it("posts transcendence message correctly", async () => {
|
||||
|
||||
Reference in New Issue
Block a user