Scripts(2.0 β)

v1.23.0

ccfolia v2.0 preview ではカスタムスクリプトをルームに適用することができます。現状のカスタムスクリプトでは、発言を読み取って内容に応じてボットからの発言を返すことができます。例えば以下のような実装をすることができます。

  • ランダム表

  • キーワードに応じて情報を出す

  • 完全に独自のダイスボット

カスタムスクリプトは EcmaScript で記述することができます。最もシンプルな例は、以下の通りです。onMessage は発言の度に発言者のクライアント内で呼び出されます。

function onMessage(message) {
    return { messages: [{ text: "something" }] }
}

上記のスクリプトは、全ての発言に対して something という発言を追加します。引数や返り値については、以下の型定義を参考にしてください。(いくつか現状では利用されていないプロパティが含まれています)

type Message = {
  to: string | null;
  toName: string;
  from: string;
  name: string;
  iconUrl: string | null;
  color: string;
  imageUrl: string | null;
  text: string;
  type: "text" | "note" | "system";
  extend: {
    roll?: {
      result: string;
      dices: { kind: string; value: number; faces: number }[];
      secret: boolean;
      success: boolean;
      failure: boolean;
      critical: boolean;
      fumble: boolean;
    };
  };
  removed: boolean;
  edited: boolean;
  channel: string;
  channelName: string;
  createdAt: Timestamp;
  updatedAt: Timestamp;
};

type ReturnValue = {
  messages: { text: string }[]
}

type onMessage = (message: Message) => ReturnValue;

ランダム表

/rand とチャットで発言された時、選択肢の中からランダムで文字列を表示します。

function onMessage(message) {
  if (message.text === "/rand") {
    const items = [
      "選択肢A",
      "選択肢B",
      "選択肢C",
      "選択肢D",
      "選択肢E",
      "選択肢F",
    ];
    const item = items[Math.floor(Math.random() * items.length)];
    return { messages: [{ text: item }] };
  }
}

外部API

/cat とチャットで発言された時、ランダムで猫の画像を表示します。`getFromUrl`はカスタムスクリプト上で提供される独自関数です。

async function onMessage(message) {
  if (message.text === "/cat") {
    const res = await getFromUrl("https://aws.random.cat/meow");
    const data = JSON.parse(res);
    return {
      messages: [{ text: `<img src="${data.file}" alt="neko" />` }]
    }
  }
}

最終更新