Acting in hubs
Embeds v3
Animated gradient themes or your own colors, 300+ icons, hero banners, feature grids, steps, timelines, cards, quotes and ratings — for every hub, DM and webhook.
Embeds v3 is the look of the official Voznest hub, now open to everyone. It builds on Embeds v2 (Blocks): every v2 block still works, and v3 adds animated gradient cards, icons instead of emoji, and seven new blocks. Use it in any hub, in DMs and from webhooks — no extra permission beyond the ones v2 needs.
New season
Season 4 is live
Ranked queues, new maps and a fresh battle pass.
Ranked
3 new maps
Battle pass
Design and test it in the Embed Studio: pick a theme or your own colors, browse every icon, start from the v3 templates and copy the code.
Themes and your own gradients
Give a container (or a hero) a theme and it gets an animated gradient frame and glow. Everything inside picks up the colors: feature chips, step markers, timeline dots, quote bars, ratings and separators with style: "gradient".
| Field | On | Notes |
|---|---|---|
theme | container, hero | One of the 16 presets above |
gradient | container, hero | Your own 2–3 hex colors, e.g. ["#ff0080", "#7928ca"]. Wins over theme |
animated | container, hero | false keeps the gradient still. Members with reduced motion always see it still |
Icons
Wherever v2 takes an emoji, v3 takes an icon: a name from a set of 326 icons (Lucide names). Unknown names are rejected, so typos surface immediately. Browse and copy them in the Studio.
| Block | Where the icon goes |
|---|---|
header | icon (next to the title) |
fields | items[].icon |
stats | items[].icon |
callout | icon |
badges · list | items[].icon |
tabs · accordion | tabs[].icon · items[].icon |
hero · features · steps · timeline · quote · cards · rating | icon / items[].icon |
New blocks
| type | Fields | Notes |
|---|---|---|
hero | title, subtitle, eyebrow, imageUrl, logoUrl, icon, theme, gradient, animated, align (left·center), height (sm·md·lg) | A banner over an animated gradient (and your image) |
features | items[1–9] {icon, title, text, color}, columns (1–3) | A grid of icon cards |
steps | items[1–8] {title, text, icon} | Numbered (or icon) steps joined by a flowing line |
timeline | items[1–10] {time, title, text, icon, color, done} | Dated milestones; done ones are struck through |
quote | content, author, role, avatarUrl, icon | A testimonial or highlighted quote |
cards | items[1–6] {title, text, imageUrl, icon, badge, url, color}, columns (1–3) | Link cards with an optional image and badge |
rating | value, max (5·10), label, count, icon | Stars with halves, e.g. 4.5 / 5 |
- Jan
Voice rooms 2.0
- Mar
Embeds v3 for everyone
- Jun
Mobile app
We moved our whole hub's announcements to v3 in an afternoon.
Sending v3
Exactly like v2: a blocks array in a message, an edit, an interaction reply or a webhook. The same limits apply (12 top-level blocks, 80 in total, 4 levels, 10,000 characters, 25 controls).
await ctx.reply({ blocks: [{ type: "container", theme: "sunset", // a preset… // gradient: ["#ff0080", "#7928ca"], // …or your own 2–3 colors // animated: false, // a still gradient blocks: [ { type: "hero", eyebrow: "New season", title: "Season 4 is live", icon: "rocket", imageUrl: "https://example.com/banner.webp" }, { type: "features", items: [ { icon: "trophy", title: "Ranked", text: "Seven tiers, seasonal rewards." }, { icon: "map", title: "3 new maps", text: "Harbor, Dunes, Skyline." }, ] }, { type: "timeline", items: [ { time: "Mon", title: "Beta", done: true }, { time: "Fri", title: "Launch", icon: "rocket" }, ] }, { type: "rating", value: 4.8, label: "Player rating", count: "12.4k reviews" }, ], }],});With the SDK
The SDK (voznest.mjs) has builders for every v3 block: themed, hero, features, steps, timeline, quote, cards and rating, plus the list of themes.
import { botFromEnv, blocks as b } from "./voznest.mjs";const bot = botFromEnv();bot.command({ name: "season", description: "What's new" }, (ctx) => ctx.reply({ blocks: [ b.themed("sunset", b.hero("Season 4 is live", { eyebrow: "New season", icon: "rocket" }), b.features([["trophy", "Ranked", "Seven tiers"], ["map", "3 new maps", "Harbor, Dunes, Skyline"]]), b.timeline([["Mon", "Beta"], ["Fri", "Launch"]]), b.rating(4.8, { label: "Player rating" }), ), b.themed(["#ff0080", "#7928ca"], b.quote("Best update yet.", { author: "Ana" })), ], }),);await bot.start();From a webhook
curl -X POST "https://api.voznest.com/api/v1/webhooks/<id>/<token>" \ -H "Content-Type: application/json" \ -d '{"blocks":[{"type":"container","theme":"emerald","blocks":[ {"type":"header","icon":"rocket","title":"Deploy finished","subtitle":"v2.4.0 is live"}, {"type":"steps","items":[{"icon":"check","title":"Build"},{"icon":"check","title":"Tests"},{"icon":"rocket","title":"Release"}]}]}]}'Channel icons
Any hub can now give a channel one of the same icons, shown in the channel list instead of the usual type icon. Pick it in Channel settings → General → Icon, or send icon when creating or editing a channel (PATCH https://api.voznest.com/api/v1/channels/:id with { "icon": "rocket" }; null goes back to the default). It needs manageChannels.
Good to know
- v2 messages keep rendering exactly as before; adding a
themeto a container is all it takes to move one to v3. - Text inside every block goes through the hub's AutoMod like any message.
- Images and links must be
http(s). Card links open in the member's browser. POST https://api.voznest.com/api/v1/blocks/validatechecks v3 layouts too, without sending anything.