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;
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 }] };
}
}
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" />` }]
}
}
}