Bot API docs

Objects and IDs

Objects have Discord's fields, so libraries can read them. A few fields that mean nothing on Voicaw are always the same (no nicknames, no boosts, no stickers…). This page covers where Voicaw differs.

IDs

IDs are strings of digits, as on Discord, but they're Voicaw's own numbers, not snowflakes. The ids in the app and in the API are the same. Because they aren't snowflakes, a library's "created at" worked out from an id (discord.js createdAt, discord.py created_at) is meaningless: it shows a date in 2015.

Two exceptions, which Discord's libraries need:

  • @everyone's role id is the guild's id, as on Discord. Use the guild's id wherever you mean @everyone (overwrites, role ids).
  • Categories have 240 (1099511627776) added to their id, since Voicaw keeps them apart from channels. A channel's parent_id uses the same number.

Users

A person's username is their Voicaw username, their display name is global_name, and discriminator is "0". A bot is shown in Discord's older style: username is its application's name and discriminator four digits, so discord.js's tag reads like Weather Bot#0420. avatar is the picture's id, and avatar_url (not Discord's) its address.

Guilds

name, icon, owner_id, roles and emojis are Voicaw's. Everything else is Discord's plainest value: no features, no boosts, no system or rules channel, verification level 0, locale en-GB. icon_url (not Discord's) is the icon's address. Guilds aren't end-to-end encrypted: what a bot reads in them, the server can read too.

Channels

TypeWhat
0Text channel
2Voice channel: its text chat takes messages as a text channel does (no threads), and bots join it with LiveKit (see Voice)
4Category
11Thread (all of Voicaw's threads are public)

Voicaw's list channels (tasks) and document channels aren't in the bot API: bots don't see them. Channel names are lower case without spaces, as on Discord. Categories carry no permission overwrites. Threads follow their channel's permissions: they have no overwrites of their own. Slow mode doesn't exist (rate_limit_per_user is 0).

Members and roles

Members have their roles (without @everyone) and joined_at. There are no nicknames, member avatars, timeouts, or server mute or deafen. Roles have name, color, position, permissions, hoist and mentionable, but no icons. A bot's own role is managed: true with tags.bot_id.

Messages

  • type: 0 (default), 19 (a reply, with message_reference and referenced_message), 18 (someone started a thread) or 46 (a poll ended).
  • content is always there: there's no Message Content intent to ask for.
  • mentions are the people the text mentions (<@id>), mention_roles the roles it pinged.
  • embeds and attachments are Discord's. People's messages sent from the app have none: their files and links are in the text.
  • reactions count each emoji, with me for the bot's own. Custom emoji are { id, name }.
  • Webhook messages have webhook_id and the webhook as a bot author.
  • In gateway events, messages also have guild_id and the author's member.
  • Polls in Voicaw are written in the message text: there's no poll object.