Badge Notifications - a server is pinged, once per badge, when a Kick or Twitch drops campaign offers a chat badge. Separate from Drops: every badge on an enabled platform, with an optional game filter, whether or not the server follows the game in Drops.

Behind the badgeNotifications launch flag: every method answers 403 until it is beta/public for the caller. The feature is free, with limits by plan:

  • All games (every badge on a platform) is Premium - the BadgeAllGames plan feature.
  • Game cards per platform: free 3, Premium 10, Premium Plus 25 (defaultBadgeGames).
  • Per-game channels, roles and webhooks are Premium Plus (CustomWebhooks), exactly as in Drops. data.limits says which apply to the server, so the form can lock what it cannot use.

Constructors

Methods

  • The badge game picker's list: every game of the platform, ONE ROW PER GAME - duplicate entries for one game are merged, every id in ids. Any game can offer a badge later, so it is not limited to games that have had one. Badge Notifications' own endpoint - the page does not need Drops'. A card stores the row's id; treat a card as picked if its gameId is in any row's ids. Search, limit (3-96, steps of 3), offset; configuredGameIds returns only the rows those ids belong to. 403 while the flag is off.

    Parameters

    • __namedParameters: {
          auth: string;
          configuredGameIds?: string[];
          limit?: number;
          offset?: number;
          platform: "kick" | "twitch";
          search?: string;
      }
      • auth: string
      • OptionalconfiguredGameIds?: string[]
      • Optionallimit?: number
      • Optionaloffset?: number
      • platform: "kick" | "twitch"
      • Optionalsearch?: string

    Returns Promise<WebResponse<BadgeGamesData>>

  • "Force Missing Badges": sends, now, every badge still live that this server is set up for and has not been sent, rather than at the next 5-minute check. Never re-sends one already sent.

    400 when badges are not set up or the platform is switched off; 403 for the launch flag; 429 within 5 minutes of the last press for this server and platform (error.code === 'rate_limited', count down from error.retryAfterSeconds); 503 in the first minutes after the bot starts, before its first badge check (that press does not start the cooldown). data.message is ready to show.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
          platform: "kick" | "twitch";
      }
      • auth: string
      • guildId: string
      • platform: "kick" | "twitch"

    Returns Promise<WebResponse<MissingSendData>>

  • Send a test badge notification to the platform's saved channel. Never pings, writes no "already sent" record, so it can be pressed repeatedly. Uses the newest badge live on that platform right now, or a sample when there is none.

    With Premium Plus it posts with the identity a real badge would: the feature webhook, or - given a gameId - that game card's own channel and webhook. Without Premium Plus it is the platform channel, as the bot, whatever is stored.

    400 when the server is not set up, the platform is off, gameId has no card on that platform, or the channel is unset / gone / missing permissions; 403 for the vote gate or the launch flag; 503 when the server's shard cannot be reached. data is a message to show as-is.

    POSTs the collection for the same reason sendTestDropNotification does: one segment is the only shape the API's catch-all guild routes cannot claim.

    Parameters

    • __namedParameters: {
          auth: string;
          gameId?: string;
          guildId: string;
          platform: "kick" | "twitch";
      }
      • auth: string
      • OptionalgameId?: string
      • guildId: string
      • platform: "kick" | "twitch"

    Returns Promise<WebResponse<string>>

  • Save a server's setup. Scalars are field by field - omit one to leave it unchanged. kickGames / twitchGames REPLACE that platform's cards, each card whole (an omitted override is null), so send the full list. A card's gameId must be a real game of THAT platform (from GET /data/drops/:platform/games); at most 50 per platform.

    400 names the field on a bad value. 403 "Premium required" when a server without Premium Plus sends a non-null card channelId / roleId / webhook, or a feature webhook with a value, or a server without Premium turns kickAllGames / twitchAllGames on; null and false are always accepted, so a lapsed server can clear them. 403 when a platform has more cards than limits.gamesPerPlatform. A webhook username must be 1-80 characters and cannot contain "discord" or "clyde"; avatarUrl must be https. Answers with the whole setup.

    Parameters

    • __namedParameters: {
          auth: string;
          guildId: string;
      } & GuildBadgesUpdate

    Returns Promise<WebResponse<GuildBadgesData>>