提供:Japanese Scratch-Wiki
(定型文式チャットから転送)

Scratch 3.0以降では、クラウドデータを利用することでリアルタイムで複数のScratcherたちが話せるチャットルームを作ることが可能である。しかしながら、現在基本的にチャットルームを作ることは許可されていない。 よくある質問と答え(FAQ)の「クラウドデータ」には、 「クラウド変数でチャットを作ることは技術的にはできますが、Scratchウェブサイトでは許可されていません。」と書かれてある。
しかし、これは、Scratchチームがあるプロジェクト内のクラウドデータを利用したチャットを監督できず、安全が保障できないからであり、現状安全なチャットルームなら作っても問題ないとされている。
チャットルームプロジェクトで使われる言葉は、許可された定型文のリストから選ばれなければならない。許可されていない単語はクラウド変数を通して伝えられてはならない。
また、ホワイトリストフィルターに加え、会話の状況はプロジェクトを実行している全ての人が簡単にモニタリングできるようになっていなければならない。そのため、個別・チャンネル別のチャットルームの使用は許可されていない。
もしScratcherたちが不適切な単語や会話がなされているのを目にしたら、「報告」ボタンを使用してそのことを伝えられる。
Scratchチームは現在、定型文チャットであれば作ることを許可している。単語を組み合わせて文を作る「セーフチャット」は2019年7月11日に禁止され、[1]自由に文が送信できるものは一度も許可されていない。
チャットルームの仕組み
チャットルームは、クラウドリストを利用して作成される。 個人が投稿したメッセージをクラウドリストに追加し、保存出来るようにすればよいのだ。 しかし、チャットルームプロジェクトで使われる言葉は、許可された定型文のリストから選ばれなければならないことに留意しなくてはならない。
定型文式チャット
定型文式チャットとは、文字通り定型文のみを投稿できるチャットのことを指す。多くのものは、許可された複数の定型文をリストに入れてユーザーに提示し、ユーザーが投稿したい文のリスト番号を入力するという仕組みである。クラウドリストには定型文のIDだけ保存し、そのIDから定型文を復元すればよいので、簡単に作ることができる。つまり、クラウド変数をリストに変換する技術さえあれば、通常のクラウドリストに必要な文字の英数字への変換・復元技術は無くても良いのだ。
定型文式チャットのつくり方
前述したように、定型文式チャットを作ることはとても簡単だ。このプロジェクトで必要な変数、リストは
- 変数「i」
- クラウド変数「ID」
- リスト「定型文」
- リスト「チャット」
である。
- 定型文の用意
@greenFlag が押されたとき::events hat 隠す [定型文 v]のすべてを削除する::list [おはよう] を [定型文 v] に追加する [こんにちは] を [定型文 v] に追加する [こんばんは] を [定型文 v] に追加する [初めまして] を [定型文 v] に追加する [お元気ですか] を [定型文 v] に追加する
別に定型文は何個あっても良いが、今回のスクリプトは定型文の数が一桁であるということが前提なので、二桁以上の定型文を使用したい場合は自分でプログラムを改造する必要がある。
- 復元プログラムの作成
これが最も重要な部分である。この定義は「再描画しない」設定にする。そうすることで復元処理を1フレーム内で終わらせることができる。
定義 復元 [チャット v]のすべてを削除する::list [i v] を [0] にする ((☁ ID) の長さ) 回繰り返す //クラウド変数「ID」の値を一つずつ取得し、取得した値番目にある定型文を「チャット」に追加 [i v] を (1) ずつ変える ([定型文 v]の((☁ ID)の(i)番目の文字::operators)番目:: list) を [チャット v] に追加する end
- 入力システムの作成
@greenFlag が押されたとき::events hat ずっと [投稿したい文のリスト番号を入力してください。] と聞いて待つ もし <<(答え) < ([定型文 v] の長さ :: list)> または <(答え) = ([定型文 v] の長さ :: list)>> なら //定型文のIDとして扱える値かどうか [☁ ID v] を ((☁ ID) と (答え)) にする//クラウド変数「ID」の一番後ろに新しいIDを追加。=投稿 end end
- リロードするプログラムの設定
本来は、クラウド変数が更新されたときにのみリロード(チャットの再読み込み)するのが望ましいが、難しいので今回は1秒ごとに自動的にリロードさせることにする。
@greenFlag が押されたとき::events hat ずっと (1) 秒待つ 復元 :: custom end