APIリファレンス
@metatell/bot-sdkで通常のボットを開発するときは、createMetatellClient()が返すMetatellClientを利用します。
型定義の全項目は、自動生成APIドキュメントも参照してください。
クライアントを作成する
import { createMetatellClient } from "@metatell/bot-sdk";
const client = createMetatellClient({
serverUrl: "wss://metatell.app",
roomId: "YOUR_ROOM_ID",
username: "GuideBot",
});
await client.connect();
終了時はdisconnect()を呼びます。
await client.disconnect();
接続と状態
| API | 戻り値 | 説明 |
|---|---|---|
connect(options?) | Promise<void> | サーバーへ接続してルームへ入室します。 |
disconnect() | Promise<void> | 接続を終了します。 |
getStatus() | { connected, connecting } | 現在の接続状態を返します。 |
getInfo() | Promise<BotInfo> | ボット自身の情報を返します。 |
getUsers() | User[] | 現在把握しているユーザー一覧を同期的に返します。 |
ルーム
| API | 説明 |
|---|---|
room.getSceneInfo() | 接続時に取得したシーン情報を返します。 |
room.prepareNavigation(options?) | シーンのSpawn Pointとナビゲーション用メッシュを読み込みます。 |
room.getUsers() | ルーム内のユーザー一覧を非同期で取得します。 |
room.getNearbyUsers(radius?) | ボットから指定距離以内にいるユーザーを取得します。 |
const nearbyUsers = await client.room.getNearbyUsers(5);
for (const user of nearbyUsers) {
console.log(user.name);
}
チャット
chat.send()はルーム全体へメッセージを送ります。
await client.chat.send("こんにちは");
chat.onMessage()はチャットを購読し、受信イベントに付属するreply()で返信できます。
client.chat.onMessage(async ({ from, text, mention, reply }) => {
console.log(from.name, text, mention);
await reply("メッセージを受け取りました");
});
メンションは[@表示名](session-id)形式です。
ボット同士の応答ループや連投を防ぐ条件を、ハンドラー側で設けてください。
アバター
| API | 説明 |
|---|---|
avatar.select(assetId) | アバターを変更します。 |
avatar.play(animation) | アニメーションを再生します。 |
avatar.moveTo(position) | 指定した座標へ移動します。 |
avatar.rotateTo(rotation) | 度数法のオイラー角へ回転します。 |
avatar.lookAt(target) | 指定座標の方向を向きます。 |
avatar.getPosition() | 現在位置を返します。 |
avatar.getAvailableAssets() | 選択できるアバターを取得します。 |
avatar.getAvailableAnimations() | 現在のアバターで利用できるアニメーションを取得します。 |
await client.avatar.moveTo({ x: 2, y: 0, z: -3 });
await client.avatar.lookAt({ x: 0, y: 1.6, z: 0 });
const animations = await client.avatar.getAvailableAnimations();
if (animations[0]) {
await client.avatar.play(animations[0]);
}