Начало

SDK для Node.js

voice.mjs — один файл без зависимостей: подключение к шлюзу с переподключением, регистрация команд, обработчики кнопок, повтор запросов при 429. Нужен Node.js 22+ (в нём есть WebSocket).

Терминал
curl -O https://voice-chat.ru/sdk/voice.mjs
Для Node 18–21 передайте WebSocket из пакета ws: new Client({ token, WebSocket: (await import("ws")).WebSocket }).

Client

МетодВозвращаетЧто делает
new Client({ token, baseUrl?, reconnect?, WebSocket? })ClientТокен бота (можно с префиксом «Bot »). baseUrl по умолчанию — https://voice-chat.ru, или переменная VOICE_API.
client.login()PromiseПолучает себя (/users/@me), регистрирует объявленные команды (PUT /applications/@me/commands) и подключается к шлюзу.
client.command(name, description, options, handler)thisОбъявить глобальную команду «/» и её обработчик.
client.button(customId | RegExp, handler)thisОбработчик нажатия кнопки с этим custom_id.
client.on(event, fn)thisПодписка на событие (см. ниже).
client.send(channelId, payload)Promise<Message>Сообщение: строка или { content, embeds, components, replyTo }.
client.edit(channelId, messageId, content)PromiseИзменить своё сообщение.
client.delete(channelId, messageId)PromiseУдалить сообщение.
client.react(channelId, messageId, emoji)PromiseПоставить или снять реакцию.
client.setActivity(text, type?)voidСтатус бота: «Играет в …». type: playing, watching, listening, streaming. Подробнее
client.api(method, path, body?)PromiseЛюбой метод REST API (путь без /api), с повтором при 429.
client.destroy()voidОтключиться без переподключения.

События

СобытиеАргумент
readyclient — после READY шлюза
messageMessage (кроме своих сообщений): .reply(), .react()
messageUpdateMessage
messageDelete{ channelId, messageId }
interactionInteraction — любая команда или кнопка
command:имяInteraction конкретной команды
memberJoin{ serverId, member }
serverAdd{ serverId, channels } — бота добавили на сервер
raw(t, d) — каждое событие шлюза
MESSAGE_CREATE, ROLE_UPDATE…d — любое событие шлюза по имени
errorError — ошибки обработчиков и запросов
disconnectкод закрытия шлюза

Interaction

Свойство / методТипОписание
type"command" | "component"Команда «/» или нажатие кнопки.
commandName, optionsstring, objectИмя команды и параметры { имя: значение }.
customId, messagestring, objectДля кнопок: custom_id и сообщение с кнопкой.
user, channelId, serverIdobject, stringКто вызвал и где.
reply(payload)PromiseОтвет (в течение 3 секунд). { ephemeral: true } — видно только вызвавшему.
defer()Promise«Бот думает…» — потом followup() в течение 15 минут.
update(payload)PromiseДля кнопок: изменить сообщение, на котором нажали.
followup(payload)PromiseЕщё одно сообщение.
editReply(payload)PromiseИзменить первый ответ.

Помощники

JavaScript
import { button, row } from "./voice.mjs";

row(
  button.primary("Да", "vote_yes"),      // также secondary, success, danger
  button.link("Сайт", "https://example.com"),
);