当日と前日に「ゴミの日」のお知らせをしてもらう記述【伺か・里々忘備録】

当日と前日に「ゴミの日」のお知らせをしてもらう記述里々の記述

ゴミ出しの日をゴーストさんに伝えておくと、ゴミの日の前日と当日にお知らせをしてくれる、という機能をつけるための記述の紹介です。
ユーザーの日常に寄り添う系といいますか、便利系のゴーストさんにぴったり。

もちろんゴミの日でなくても、誕生日や何かの記念日などなど、カスタマイズ次第ではいろんな用途に使えます。
記述をいじれる人は、お好きにいじってお使いくださいませ。

なおここで紹介しているものは、里々のしおりを使ってゴーストを制作している環境向けの記述です。
里々以外の栞を使っている場合はご注意。

記述の仕様書

記述を紹介する前に、この記述を使うとどんなことができるようになるのか、なにができないのかを説明しておきます。

自分の実装したいものと一致するかどうかを確認するためにも、さらっと目を通しておくと良いかもしれません。

できること

この記述を使うと、こんなことができるようになります。

  • ゴミの日の「当日」にお知らせしてくれる
  • ゴミの日の「前日」にお知らせしてくれる(例:「明日は燃えるゴミの日だよ!」)
  • 収集時間を設定しておくと、ゴミの日当日のその時刻になるまで、お知らせをしてくれる
  • お知らせは当日と前日で個別にオンオフの設定ができる
  • 設定したゴミの日の設定を一括で削除する(個別にも削除できます)

まずゴミの日の設定は、ゴミの種類(一般ゴミ、燃えるゴミ、資源ごみ、プラスチックゴミなど)の指定とゴミの曜日の2種類をユーザーに設定してもらう必要があります。
また、ゴミの日の設定の途中で、設定を完了しないままバルーンを閉じてしまっても問題ないようになっています。

ちなみに、ゴミの日のお知らせの設定がオンになっていたとしても、ゴミの日がひとつも登録されていない時はお知らせトークはされないようになっているのでご安心です。

ゴミの種類の設定

ゴミの種類の設定に関しては、同じ曜日に2種類以上のゴミの種類をセットすることもできます。(例:月曜日と木曜日に一般ゴミ)

その逆もしかりで、同じ種類のゴミを別々の曜日にセットすることもできます。(例:燃えるゴミの日は金曜日と火曜日)

ゴミの収集時間の設定

ゴミの収集時間の設定は、必須ではなくオプションです。
設定したければする、といった感じですね。

ゴミの収集時間を設定しておくと、ゴミの日の当日に、その時刻になるまでお知らせトークをしてくれます。
例えば9時に設定した場合、8時59分までお知らせトークをする、といった感じです。

収集時間を設定しなかった場合は、ゴミの日当日、その日が終わるまでずっとお知らせをします。
つまり、日付変更線をまたいで日付が変わるまで、です。

ゴミの日の設定の削除

ゴミの日の設定は個別にも削除できますし、一括で全ての登録を削除することもできるようにしてあります。
とっても便利。

なお、「一括削除」で設定を削除しても、「登録したゴミの収集時間」や「お知らせのオンオフ設定」は削除されません。
一括削除では、ゴミの日の設定(ゴミの種類と曜日)だけがリセットされます。

できないこと

一方で、この記述だけでは以下のことはできません。

  • 通知音を鳴らす

この記述は「お知らせ機能」というよりかは、どちらかというとランダムトークに交じって、さりげなく「そういえば明日はゴミの日だね~」のノリで声をかけてくれたらいいなぁという願望のもと作ったものです。
なので、通知音を鳴らすためのあれやこれやの仕組みはこの記述内には入っていません。

とはいえせっかくなので、通知音をつけたい!という場合の記述ものちほど簡単に紹介しておきます。

もしくは、以下で紹介している「トークに通知音を鳴らす記述」を使っている場合は、このゴミの日のお知らせの際にも使うことができるはずです。

「トークと同時に通知音を鳴らす」設定を機能別に行う書き方【伺か・里々忘備録】
ゴーストに通知音を設定するための書き方を紹介しています。 できるだけすっきりとした記述になるようにがんばってみました。 念のための前置きとして、ここでいう通知音とは、ゴーストが特定のトークを話す時に通知音として設定した音を鳴らすという機能...

ゴミの日のお知らせだけではなく、他にも通知音を鳴らしたいトークがあるんだ、なんていう場合にはこちらもぜひ参考にしてみてくださいませ。

ゴミの日をお知らせする記述

ここからは、解説も交えつつ記述の紹介をしていきます。

なお変数名やジャンプ先は長めの文字列で書いているので、いじれそうな人はお好きな文字列に変えて使うともっとシンプルにできるかもです。

メニュー画面の表示

まずはメニュー画面のための記述をみていきます。

この記述は、「ゴミの日をお知らせする機能を呼び出したときに一番最初に表示される文字列」をつかさどっている部分です。
なので、ゴミの日を設定するときはまず最初にこの部分が表示されます。

ここでやってほしいことはこの2つ。

  1. 以下の記述をお好きなdic内に貼り付ける
  2. 既存のつつきメニュー内などに「_ゴミの日設定【タブ】ゴミ収集曜日のお知らせ機能_メニュー」と書く

以下の記述を、お好きなdic内のお好きな箇所にぺたりと貼り付けてお使いくださいませ。

そして、すでに記述のあるゴーストつつきメニューなどの中に「_ゴミの日設定【タブ】ゴミ収集曜日のお知らせ機能_メニュー」みたいな感じで書いてつなげれば、ゴミの日お知らせ機能を呼び出すことができます。

#===============================
#ゴミ収集曜日のお知らせ機能
#===============================

@ゴミ収集曜日のお知らせ機能_戻る
\q[ゴミの日メニューに戻る,ゴミ収集曜日のお知らせ機能_メニュー]
*ゴミ収集曜日のお知らせ機能_メニュー
:やあ。
\q[(when,(変数「登録したゴミ収集曜日1」の存在)==1,(登録したゴミ収集曜日1)曜日「(本日のゴミの日のゴミ種類1)」,未設定「ゴミの日1」),ゴミ収集曜日のお知らせ設定_ゴミ設定1]
\q[(when,(変数「登録したゴミ収集曜日2」の存在)==1,(登録したゴミ収集曜日2)曜日「(本日のゴミの日のゴミ種類2)」,未設定「ゴミの日2」),ゴミ収集曜日のお知らせ設定_ゴミ設定2]
\q[(when,(変数「登録したゴミ収集曜日3」の存在)==1,(登録したゴミ収集曜日3)曜日「(本日のゴミの日のゴミ種類3)」,未設定「ゴミの日3」),ゴミ収集曜日のお知らせ設定_ゴミ設定3]

\q[(when,(変数「登録したゴミ収集曜日4」の存在)==1,(登録したゴミ収集曜日4)曜日「(本日のゴミの日のゴミ種類4)」,未設定「ゴミの日4」),ゴミ収集曜日のお知らせ設定_ゴミ設定4]
\q[(when,(変数「登録したゴミ収集曜日5」の存在)==1,(登録したゴミ収集曜日5)曜日「(本日のゴミの日のゴミ種類5)」,未設定「ゴミの日5」),ゴミ収集曜日のお知らせ設定_ゴミ設定5]
\q[(when,(変数「登録したゴミ収集曜日6」の存在)==1,(登録したゴミ収集曜日6)曜日「(本日のゴミの日のゴミ種類6)」,未設定「ゴミの日6」),ゴミ収集曜日のお知らせ設定_ゴミ設定6]

\q[収集時間「(when,(変数「ゴミの収集時間」の存在)==0,未設定,(ゴミの収集時間)時)」,ゴミ収集曜日のお知らせ機能_ゴミの収集時間の設定]
\q[当日ゴミの日お知らせ「(when,(当日ゴミの日お知らせスイッチ)==オン,する,しない)」,ゴミ収集曜日のお知らせ機能_当日ゴミの日お知らせ設定]
\q[前日ゴミの日お知らせ「(when,(前日ゴミの日お知らせスイッチ)==オン,する,しない)」,ゴミ収集曜日のお知らせ機能_前日ゴミの日お知らせ設定]
\q[ゴミの日設定を全て削除する,ゴミ収集曜日のお知らせ機能_設定を全て削除する]
\q[これは何してくれるものなの,ゴミ収集曜日のお知らせ機能_機能説明]
\q[戻る,戻る]
\q[なんでもない,なんでもない]

上記の記述について、ちょこっと解説しておきます。
解説いらないよ!という場合は読み飛ばしても大丈夫です。

「メニュー画面」記述の解説

以下の部分は、「選択肢を表示する」ためのさくらスクリプトです。

\q[(when,(変数「登録したゴミ収集曜日1」の存在)==1,(登録したゴミ収集曜日1)曜日「(本日のゴミの日のゴミ種類1)」,未設定「ゴミの日1」),ゴミ収集曜日のお知らせ設定_ゴミ設定1]

ここでは、whenの条件分岐をつけて、以下のような動作をさせています。

when条件分岐

  • ゴミの日設定が登録されている場合は、「ゴミの種類と曜日」を表示する
  • それ以外の場合は「未設定」と表示する

ゴミの日メニュー画面を開けば、どこに何を登録済みかがひとめでわかるのでとっても便利。

こういった、when条件で選択肢を分岐させる記述はここ以外にも出てきます。
トーク部分もwhenで分岐させていたりします。

\q[これは何してくれるものなの,ゴミ収集曜日のお知らせ機能_機能説明]

また、このようにゴーストに「これはどんな機能か」を説明してもらうための選択肢もつけています。
機能説明はいらぬ!させなくていい!という場合は、上記の一文を削除しておいてくださいませ。

「戻る」「なんでもない」などの選択肢はお好みで文字を変えても大丈夫です。

収集時間の設定

以下の記述は、「収集時間を設定するための部分」をつかさどっている記述です。
収集時間の設定の削除も、以下の記述の中でできます。

こちらも、お好きなdic内にぺたりと貼り付けてお使いください。

#==========================
#収集時間
#==========================
*ゴミ収集曜日のお知らせ機能_ゴミの収集時間の設定
:(when,(変数「ゴミの収集時間」の存在)==0,
ゴミの収集時間を教えておいてくれたら、当日はその時間が来るまでの間、君に声をかけるよ。,
ゴミの収集時刻は(ゴミの収集時間)時だと聞いているよ。)
\q[収集時刻を(when,(変数「ゴミの収集時間」の存在)==0,設定,変更)する,ゴミ収集曜日のお知らせ機能_ゴミの収集時間を設定するよ]
\q[時刻の設定を削除する,ゴミ収集曜日のお知らせ機能_ゴミの収集時間の設定を削除するよ]

(ゴミ収集曜日のお知らせ機能_戻る)
\q[やっぱやめる,なんでもない]
*ゴミ収集曜日のお知らせ機能_ゴミの収集時間を設定するよ
:そしたら、この装置のツマミを動かしてゴミの収集時刻を教えてくれる?
24時間表記でお願いするよ。
それと、今聞いている時刻は「(ゴミの収集時間)時」になっているよ。\![open,sliderinput,ゴミの収集時間,30000,(ゴミの収集時間),0,23]
# 30000と書いてあるので、スライダーは30秒でタイムアウトになります

# 「OnUserInput」をはさんで、以下に飛んできてるよ
*ゴミの収集時間を教えてもらった
>ゴミの収集時間の入力が0時だった【タブ】(ゴミの収集時間)==0
:(ゴミの収集時間)時だね。わかったよ。
ゴミの日の当日には、この時間になるまで君に声をかけるね。

(ゴミ収集曜日のお知らせ機能_戻る)

*ゴミの収集時間の入力が0時だった
:0時?
それなら当日にお知らせする必要はなさそうだけど・・・まあいいっか。

(ゴミ収集曜日のお知らせ機能_戻る)

*ゴミ収集曜日のお知らせ機能_ゴミの収集時間の設定を削除するよ
>ゴミの収集時間の設定を削除しようと思ったが設定されてなかった【タブ】(変数「ゴミの収集時間」の存在)==0
$ゴミの収集時間【タブ】
:ゴミの収集時刻は、覚えておかなくていいんだね。

(ゴミ収集曜日のお知らせ機能_戻る)

*ゴミの収集時間の設定を削除しようと思ったが設定されてなかった
:ゴミの収集時刻については、何も聞いていないね。

(ゴミ収集曜日のお知らせ機能_戻る)
\q[やっぱやめる,なんでもない]

なおここでは、「スライダー」というタイプの入力ボックスを使って、ユーザーに時間を設定してもらうことができるようになっています。

上記の記述では、「8時」など時刻ぴったりの設定にしか対応していません
なので、「8時半」といった設定にしたい場合は、記述をいじる必要があります。

スライダー部分の解説

スライダー部分の解説をちょこっとしておきます。

以下の部分が、ユーザーに任意の時間を指定してもらう「スライダー」自体の設定をしている部分です。

\![open,sliderinput,ゴミの収集時間,30000,(ゴミの収集時間),0,23]

この中の「sliderinput」という英文字部分が、「スライダータイプの入力ボックスを表示してください!」と指示を出している箇所です。
ここをいじることで、スライダーだったりキーボードで数字を直接入力するタイプだったりと変えることができます。

そして、このスライダーで設定してもらった時間は、「ゴミの収集時間」という変数の中に登録されます。
さらに、一度設定した収集時間をスライダーで変更する場合には、スライダーのツマミの初期位置は「ゴミの収集時間」に登録してある数字(時間)の位置になるようにしてあります。

「30000」という数字は、「スライダーが表示されてから、何秒でタイムアウトにするか?」を指定しているものです。
ここでは「30000」と書いてあるので、スライダーが表示されてから30秒が経過した時点でタイムアウトになってスライダーが非表示になります。

タイムアウトした時のトークが書きたい場合は、各自「*OnChoiceTimeout」に記述してくださいませ。

そして、「0,23」という数字。
この数字は、「スライダーで選択できる時間は何時~何時」を設定しています。

この部分には、24時間表記で0時~23時までの何時でも設定することができるようになっています。
なので、もし「午前中だけ指定できるようにしたい!」などの場合には「7,10」のように好きに書き換えてください。

空打ちについて

なお、スライダーは「空打ち」されることがない(はず)なので、空打ちされた時の反応トークは設定されていません。

ちなみに念のために説明しておくと、空打ちとは、値を設定しないまま(つまり空白のまま)設定を行うことです。
例えば、ゴーストが「あなたの名前を教えて!」と言って文字列入力ボックスを表示したはいいものの、何も文字を入力されずにエンターキーを押されてしまった時。これが空打ちです。

下記の部分には、スライダーで時間を設定したあと、「*OnUserInput」を経由して飛んできます。

*ゴミの収集時間を教えてもらった

そして、*OnUserInputの中身はこんな感じ。

*OnUserInput
>(R0)を空打ちされた【タブ】(is_empty(バイト値、1)(R1))
$(R0)【タブ】(R1)
>(R0)を教えてもらった

里々のテンプレートゴーストさんを改変して作っているゴーストさんなら、恐らくすでにこのOnUserInputの記述はdic内のどこかにあるはずです。

上記の「*OnUserInput」を経由しないと「*ゴミの収集時間を教えてもらった」には飛んでこないのでご注意。
うまく動かないぞ?という場合には、このOnUserInputが存在していない可能性もなきにしもあらずなので、これをdic内に追記して今一度試してみてください。

ゴミの日お知らせのオンオフ設定

下記の記述で、「ゴミの日をお知らせしてもらうか、お知らせしないか」の設定ができます。
簡単にいうとお知らせのオンオフ設定をつかさどっている部分です。

ゴミの日の当日・前日と、それぞれ個別にお知らせ設定をオンオフにできるようにしてあります。

*ゴミ収集曜日のお知らせ機能_当日ゴミの日お知らせ設定
:(when,(当日ゴミの日お知らせスイッチ)==オン,
ゴミの日の当日、今日がゴミを出す日だってことを君にお知らせしているよ。9時に回収されると聞いているから、その時間になるまで声をかけることにしているんだ。,
今、ゴミの日の当日のお知らせはしないでいるよ。もし声をかけた方がよかったら、教えておくれよ。)
\q[(when,(当日ゴミの日お知らせスイッチ)==オン,お知らせをオフにする,ゴミの日を知らせてくれ),ゴミ収集曜日のお知らせ機能_当日ゴミの日お知らせ設定を変更した]

(ゴミ収集曜日のお知らせ機能_戻る)
\q[なんでもない,なんでもない]

*ゴミ収集曜日のお知らせ機能_当日ゴミの日お知らせ設定を変更した
:(when,(当日ゴミの日お知らせスイッチ)==オン,(set,当日ゴミの日お知らせスイッチ,オフ),(set,当日ゴミの日お知らせスイッチ,オン))φ
(when,(当日ゴミの日お知らせスイッチ)==オン,
わかったよ。これからは、当日のお知らせはしないでおくね。,
わかったよ。ゴミの日には、君に声をかけるね。)

(ゴミ収集曜日のお知らせ機能_戻る)
*ゴミ収集曜日のお知らせ機能_前日ゴミの日お知らせ設定
:(when,(前日ゴミの日お知らせスイッチ)==オン,
ゴミの日の前日、明日出せるゴミについて君にお知らせしているよ。,
今は、ゴミの日前日のお知らせはしないでおいているよ。もし、明日出せるゴミについて君に知らせた方がよかったら、その時は教えておくれ。)
\q[(when,(前日ゴミの日お知らせスイッチ)==オン,お知らせをオフにする,明日出せるゴミを知らせてくれ),ゴミ収集曜日のお知らせ機能_前日ゴミの日お知らせ設定を変更した]

(ゴミ収集曜日のお知らせ機能_戻る)
\q[なんでもない,なんでもない]

*ゴミ収集曜日のお知らせ機能_前日ゴミの日お知らせ設定を変更した
:(when,(前日ゴミの日お知らせスイッチ)==オン,(set,前日ゴミの日お知らせスイッチ,オフ),(set,前日ゴミの日お知らせスイッチ,オン))φ
(when,(前日ゴミの日お知らせスイッチ)==オン,
わかったよ。これからは、明日出せるゴミのことはお知らせしないでおくよ。,
わかったよ。明日、何かのゴミを出せる日だったら、君に声をかけるね。)

(ゴミ収集曜日のお知らせ機能_戻る)

少しごちゃっと長いですが、この中では「前日ゴミの日お知らせスイッチ」「当日ゴミの日お知らせスイッチ」のスイッチをオンオフにしているだけですので、特に複雑なことはしていません。

whenでスイッチのオンオフをしていますが、(calc,計算式)関数を使用すればもっとスッキリ書ける気もします。
私はwhenが分かりやすいのでwhenで。そこらへんをどう書くかはお好みでどうぞ。

ゴミの日設定を一括削除する

下記は「ゴミの日の設定を一括で削除する」ための部分です。
設定は個別でも消すことができるので、この「一括で削除する」の機能がいらない場合には下記の記述は書かなくてもいいです。

以下の記述を書くと、登録したゴミの日を個別にぽちぽち消さずとも、一括で全削除することができるようになります。便利。

*ゴミ収集曜日のお知らせ機能_設定を全て削除する
:ゴミの日の設定をリセットするね。
\q[設定を全て削除する,ゴミ収集曜日のお知らせ機能_設定を全て削除しました]

φ(設定済みの「ゴミ収集日」と「ゴミの種類」が全て削除されますφ)

(ゴミ収集曜日のお知らせ機能_戻る)
\q[やっぱやめる,なんでもない]

*ゴミ収集曜日のお知らせ機能_設定を全て削除しました
$登録したゴミ収集曜日1【タブ】
$本日のゴミの日のゴミ種類1【タブ】
$登録したゴミ収集曜日の前日の曜日1【タブ】
$登録したゴミ収集曜日2【タブ】
$本日のゴミの日のゴミ種類2【タブ】
$登録したゴミ収集曜日の前日の曜日2【タブ】
$登録したゴミ収集曜日3【タブ】
$本日のゴミの日のゴミ種類3【タブ】
$登録したゴミ収集曜日の前日の曜日3【タブ】
$登録したゴミ収集曜日4【タブ】
$本日のゴミの日のゴミ種類4【タブ】
$登録したゴミ収集曜日の前日の曜日4【タブ】
$登録したゴミ収集曜日5【タブ】
$本日のゴミの日のゴミ種類5【タブ】
$登録したゴミ収集曜日の前日の曜日5【タブ】
$登録したゴミ収集曜日6【タブ】
$本日のゴミの日のゴミ種類6【タブ】
$登録したゴミ収集曜日の前日の曜日6【タブ】
:リセットしたよ。

(ゴミ収集曜日のお知らせ機能_戻る)
さらっと説明をしておくと、以下のこの部分が「ゴミの日の登録を削除している」部分です。
$登録したゴミ収集曜日1【タブ】
$本日のゴミの日のゴミ種類1【タブ】

なおこの変数名は単純に「1234…」と連番になっているだけのものなので、うまいこと関数と組み合わせればもっとスッキリ書ける気もしてます。

ゴミの日の設定を登録する記述

さて、以下の記述は「ゴミの日の設定」をするためのキモとなる部分です!
ゴミの日の設定を行う際には、いつも以下の記述を経由して、「ゴミの日の曜日」と「出せるゴミの種類」を登録していきます。

そんなわけなので、ゴミの日の登録数上限・ゴミの種類を増やしたい場合も、そのつど以下の部分をいじる必要があります。

#===============================
#ゴミの日を設定できる個数を増やしたい場合は、ここに追加していこう。他にも書く場所があるので、探して数字追加しといてください。
#===============================
*ゴミ収集曜日のお知らせ設定_ゴミ設定1
$これから設定するゴミの日の番号【タブ】1
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
*ゴミ収集曜日のお知らせ設定_ゴミ設定2
$これから設定するゴミの日の番号【タブ】2
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
*ゴミ収集曜日のお知らせ設定_ゴミ設定3
$これから設定するゴミの日の番号【タブ】3
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
*ゴミ収集曜日のお知らせ設定_ゴミ設定4
$これから設定するゴミの日の番号【タブ】4
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
*ゴミ収集曜日のお知らせ設定_ゴミ設定5
$これから設定するゴミの日の番号【タブ】5
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
*ゴミ収集曜日のお知らせ設定_ゴミ設定6
$これから設定するゴミの日の番号【タブ】6
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定

#===============================
*ゴミ収集曜日のお知らせ設定_ゴミの種類の設定
:(when,(変数「登録したゴミ収集曜日(これから設定するゴミの日の番号)」の存在)==1,
「(本日のゴミの日のゴミ種類(これから設定するゴミの日の番号))」の収集日は、(登録したゴミ収集曜日(これから設定するゴミの日の番号))曜日だと聞いているよ。,
そしたら、まずはゴミの種類を教えてくれるかい?)

\q[一般ゴミ,ゴミ収集曜日のお知らせ設定_一般ゴミ]
\q[燃えるゴミ,ゴミ収集曜日のお知らせ設定_燃えるゴミ]
\q[燃えないゴミ,ゴミ収集曜日のお知らせ設定_燃えないゴミ]

\q[資源ゴミ,ゴミ収集曜日のお知らせ設定_資源ゴミ]
\q[プラスチックゴミ,ゴミ収集曜日のお知らせ設定_プラスチックゴミ]
\q[段ボールゴミ,ゴミ収集曜日のお知らせ設定_段ボールゴミ]
\q[設定を削除する,ゴミ収集曜日のお知らせ設定_設定を個別で削除する]

(ゴミ収集曜日のお知らせ機能_戻る)
\q[やっぱやめる,なんでもない]

#===============================
#ゴミの種類を増やしたい場合は、ここに追加していくだけでOK。あと上記の項目も追加しといてね。
#===============================
*ゴミ収集曜日のお知らせ設定_一般ゴミ
$これから設定するゴミの種類【タブ】一般ゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定
*ゴミ収集曜日のお知らせ設定_燃えるゴミ
$これから設定するゴミの種類【タブ】燃えるゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定
*ゴミ収集曜日のお知らせ設定_燃えないゴミ
$これから設定するゴミの種類【タブ】燃えないゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定
*ゴミ収集曜日のお知らせ設定_資源ゴミ
$これから設定するゴミの種類【タブ】資源ゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定
*ゴミ収集曜日のお知らせ設定_プラスチックゴミ
$これから設定するゴミの種類【タブ】プラスチックゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定
*ゴミ収集曜日のお知らせ設定_段ボールゴミ
$これから設定するゴミの種類【タブ】段ボールゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定

#===============================
#設定を個別で削除
#===============================
*ゴミ収集曜日のお知らせ設定_設定を個別で削除する
>ゴミ収集曜日のお知らせ設定_設定を個別で削除しようとしたが何も設定されていない【タブ】(変数「登録したゴミ収集曜日(これから設定するゴミの日の番号)」の存在)==0
$登録したゴミ収集曜日(これから設定するゴミの日の番号)【タブ】
$本日のゴミの日のゴミ種類(これから設定するゴミの日の番号)【タブ】
$登録したゴミ収集曜日の前日の曜日(これから設定するゴミの日の番号)【タブ】
:わかったよ。
もうこのゴミの日については、お知らせしないね。

(ゴミ収集曜日のお知らせ機能_戻る)

*ゴミ収集曜日のお知らせ設定_設定を個別で削除しようとしたが何も設定されていない
:そこにはまだなにも登録されていないようだね。

(ゴミ収集曜日のお知らせ機能_戻る)

*ゴミ収集曜日のお知らせ設定_曜日の設定
:(これから設定するゴミの種類)だね。
じゃあ、曜日を教えてくれる?

\q[月曜日,ゴミ収集曜日のお知らせ設定_月曜日]
\q[火曜日,ゴミ収集曜日のお知らせ設定_火曜日]
\q[水曜日,ゴミ収集曜日のお知らせ設定_水曜日]
\q[木曜日,ゴミ収集曜日のお知らせ設定_木曜日]
\q[金曜日,ゴミ収集曜日のお知らせ設定_金曜日]
\q[土曜日,ゴミ収集曜日のお知らせ設定_土曜日]
\q[日曜日,ゴミ収集曜日のお知らせ設定_日曜日]

(ゴミ収集曜日のお知らせ機能_戻る)
\q[やっぱやめる,なんでもない]

#===============================
#(現在曜日)は「月」などと表示されます。(現在曜日)と==させたいので、ここで入れる変数は(現在曜日)で出力される文字と合わせる必要があるよ。
#===============================
*ゴミ収集曜日のお知らせ設定_月曜日
$これから設定するゴミの日の曜日【タブ】月
$これから設定するゴミの日の前日の曜日【タブ】日
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_火曜日
$これから設定するゴミの日の曜日【タブ】火
$これから設定するゴミの日の前日の曜日【タブ】月
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_水曜日
$これから設定するゴミの日の曜日【タブ】水
$これから設定するゴミの日の前日の曜日【タブ】火
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_木曜日
$これから設定するゴミの日の曜日【タブ】木
$これから設定するゴミの日の前日の曜日【タブ】水
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_金曜日
$これから設定するゴミの日の曜日【タブ】金
$これから設定するゴミの日の前日の曜日【タブ】木
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_土曜日
$これから設定するゴミの日の曜日【タブ】土
$これから設定するゴミの日の前日の曜日【タブ】金
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
*ゴミ収集曜日のお知らせ設定_日曜日
$これから設定するゴミの日の曜日【タブ】日
$これから設定するゴミの日の前日の曜日【タブ】土
>ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面

*ゴミ収集曜日のお知らせ設定_設定項目の最終確認画面
#------------関数に代入して設定を完了させるための記述-------------------------------------
$登録したゴミ収集曜日(これから設定するゴミの日の番号)【タブ】(これから設定するゴミの日の曜日)
$登録したゴミ収集曜日の前日の曜日(これから設定するゴミの日の番号)【タブ】(これから設定するゴミの日の前日の曜日)
$本日のゴミの日のゴミ種類(これから設定するゴミの日の番号)【タブ】(これから設定するゴミの種類)
#------------関数の中身を削除している。以下のものは書かなくても動くよ。念のために記述。-------------------------------------
$これから設定するゴミの日の曜日【タブ】
$これから設定するゴミの種類【タブ】
$これから設定するゴミの日の前日の曜日【タブ】
#------------以下セリフ-------------------------------------
:「(本日のゴミの日のゴミ種類(これから設定するゴミの日の番号))」の収集日は(登録したゴミ収集曜日(これから設定するゴミの日の番号))曜日なんだね。
わかったよ。覚えておくね。

(ゴミ収集曜日のお知らせ機能_戻る)

例のごとく、この記述に関してもちょこっと解説させてください。

上記の記述で肝心になるのは、「ゴミの日の設定数の上限を増やす」と「登録できるゴミの種類を増やす」の部分です。
なのでこれについてカスタマイズの方法なども含め説明しておきます。

ちなみに、他の残りの部分は曜日の登録と、登録されるゴミの種類と曜日の確認画面です。
確認画面とは言ってますが、「それでOK」「やっぱ訂正する」みたいなワンクッションのアレではないです。
選択されたゴミの種類と曜日を表示させて、「この設定で登録したよ~」と言ってるだけの部分になります。

ゴミの日の設定数の上限を増やす

ゴミの日の設定数上限を増やすには、ざっくりと挙げると以下の手順が必要になります。

  • 以下の3行の部分をコピペで追記する
  • 末尾にある数字を、被らない数字に書き換える
  • 「ゴミ設定のメニュートップ画面」の記述をいじる
  • 「ゴミを一括削除する部分」の記述をいじる

設定数上限を増やすときは、いじらないといけない箇所が何か所かあるのでちょっと面倒かもしれません。

基本的には、以下のこの部分を増やせば「ゴミの日を設定することができる数の上限」を増やすことができます。

*ゴミ収集曜日のお知らせ設定_ゴミ設定1
$これから設定するゴミの日の番号【タブ】1
>ゴミ収集曜日のお知らせ設定_ゴミの種類の設定

「ゴミの日を設定することができる数の上限」をひとつ増やしたいごとに、上記のこの3行を追記する必要があります。
逆に、登録上限をひとつ減らしたいのであれば、この3行をひとかたまり分削除すればいいです。

ゴミ設定の変数は、単純に123…と連番にしてあります。
なので、登録上限を増やすときいじらなければいけない部分は、この末尾にある数字だけです。
つまり、この数字部分をすでにある数字と被らない数字に変更して、この3行を増やしてもらえたらOKっていうことです。

ただ、この3行を増やすだけでゴミの日の登録数を増やすことができる、というわけではありません。
というのも、ゴミ設定のメニュートップ画面や、ゴミを一括削除する部分など、「登録できる数を増やした分だけ、追加しないといけない記述」はちょこちょこと散らばっているからです。
なので、ゴミの日の登録数を増やした場合は、どこに追加をすればいいのか探し出して、記述を追加しておいてください。

大体、変数が連番で書かれている部分がそれです。
全部読んで探さずとも、長めの行になって幅を取っているのがソレなはずなので見つけやすい、はず。

登録できる「ゴミの種類」を増やす

登録できる「ゴミの種類」を増やしたい時は、その手順として挙げるとこれだけです。

  • 下記の3行をコピペして追記する
  • 「ゴミの種類を選択するメニュー」の項目を増やす

登録できる「ゴミの種類」を増やしたい時は、下記の記述を追加してください。

*ゴミ収集曜日のお知らせ設定_一般ゴミ
$これから設定するゴミの種類【タブ】一般ゴミ
>ゴミ収集曜日のお知らせ設定_曜日の設定

ゴミの種類を増やしたい場合は、この記述を追加して、メニュー項目を増やすだけでOKです。
ゴミの日の登録数上限を増やす場合とちがって、こちらはわりとお手軽めに増やせます。

「一般ゴミ」という文字列の部分を、増やしたいゴミの種類の名称に書き換えてください。

ゴミの種類を増やした時は、忘れずに「ゴミの種類を選択するメニュー」にも項目を追加しておいてくださいね。
これを忘れると、登録時にそのゴミを選択できません……。

ゴミの日をお知らせするトーク

最後に、ゴミの日を登録した曜日の当日と前日に、ゴミの日をお知らせするためのトークをしゃべってもらう部分の記述です。

設定をどうこうしているのではなく普通にトークを出してる部分ですので、トークを複数用意したい場合などはトークを用意するいつもの記述な感じでお好きにいじってくださいませ。

#===============================
#当日ゴミの日お知らせトーク
#===============================
*【タブ】(当日ゴミの日お知らせスイッチ)==オン
>ゴミ収集時間が設定されている時のお知らせトーク【タブ】(変数「本日のゴミの日のゴミを出す時間」の存在)==1
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日1)==(現在曜日)
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日2)==(現在曜日)
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日3)==(現在曜日)
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日4)==(現在曜日)
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日5)==(現在曜日)
>当日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日6)==(現在曜日)
()

*ゴミ収集時間が設定されている時のお知らせトーク【タブ】(現在時)<(本日のゴミの日のゴミを出す時間)
:今日は(現在曜日)曜日だ。
(if,(登録したゴミ収集曜日1)==(現在曜日),「(本日のゴミの日のゴミ種類1)」,)φ
(if,(登録したゴミ収集曜日2)==(現在曜日),「(本日のゴミの日のゴミ種類2)」,)φ
(if,(登録したゴミ収集曜日3)==(現在曜日),「(本日のゴミの日のゴミ種類3)」,)φ
(if,(登録したゴミ収集曜日4)==(現在曜日),「(本日のゴミの日のゴミ種類4)」,)φ
(if,(登録したゴミ収集曜日5)==(現在曜日),「(本日のゴミの日のゴミ種類5)」,)φ
(if,(登録したゴミ収集曜日6)==(現在曜日),「(本日のゴミの日のゴミ種類6)」,)φ
を出せる日だよ。
もしゴミを出すなら、(本日のゴミの日のゴミを出す時間)までに出しておくんだよ。

*当日ゴミの日お知らせトーク
:今日は(現在曜日)曜日だ。
(if,(登録したゴミ収集曜日1)==(現在曜日),「(本日のゴミの日のゴミ種類1)」,)φ
(if,(登録したゴミ収集曜日2)==(現在曜日),「(本日のゴミの日のゴミ種類2)」,)φ
(if,(登録したゴミ収集曜日3)==(現在曜日),「(本日のゴミの日のゴミ種類3)」,)φ
(if,(登録したゴミ収集曜日4)==(現在曜日),「(本日のゴミの日のゴミ種類4)」,)φ
(if,(登録したゴミ収集曜日5)==(現在曜日),「(本日のゴミの日のゴミ種類5)」,)φ
(if,(登録したゴミ収集曜日6)==(現在曜日),「(本日のゴミの日のゴミ種類6)」,)φ
を出せる日だよ。

#===============================
# 前 日 ゴミの日お知らせトーク
#===============================
*【タブ】(前日ゴミの日お知らせスイッチ)==オン
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日1)==(現在曜日)
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日2)==(現在曜日)
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日3)==(現在曜日)
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日4)==(現在曜日)
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日5)==(現在曜日)
>前日ゴミの日お知らせトーク【タブ】(登録したゴミ収集曜日の前日の曜日6)==(現在曜日)
()

*前日ゴミの日お知らせトーク
:明日は(明日の曜日)曜日だ。
(if,(登録したゴミ収集曜日の前日の曜日1)==(現在曜日),「(本日のゴミの日のゴミ種類1)」,)φ
(if,(登録したゴミ収集曜日の前日の曜日2)==(現在曜日),「(本日のゴミの日のゴミ種類2)」,)φ
(if,(登録したゴミ収集曜日の前日の曜日3)==(現在曜日),「(本日のゴミの日のゴミ種類3)」,)φ
(if,(登録したゴミ収集曜日の前日の曜日4)==(現在曜日),「(本日のゴミの日のゴミ種類4)」,)φ
(if,(登録したゴミ収集曜日の前日の曜日5)==(現在曜日),「(本日のゴミの日のゴミ種類5)」,)φ
(if,(登録したゴミ収集曜日の前日の曜日6)==(現在曜日),「(本日のゴミの日のゴミ種類6)」,)φ
を出せる日だよ。
(when,(変数「本日のゴミの日のゴミを出す時間」の存在)==1,もしゴミを出すなら、(本日のゴミの日のゴミを出す時間)までに出すんだよ。,)

@明日の曜日
(
if,(現在曜日)==月,火)(
if,(現在曜日)==火,水)(
if,(現在曜日)==水,木)(
if,(現在曜日)==木,金)(
if,(現在曜日)==金,土)(
if,(現在曜日)==土,日)(
if,(現在曜日)==日,月)

これまた連番が記述を長くしているので、うまいこと変数と組み合わせてしまえばもっと短くスッキリと書けるようになる気もします。
たぶんloop関数かそこらへんの気はしてるんですが、私はいかんせん連番系の変数によわい。

また、「明日は火曜日」などと明日の曜日を言わせる必要がない場合は、「@明日の曜日」以下の記述を消してください。
この「@明日の曜日」以下の部分は、条件分岐などのためではなく、明日の曜日を言わせるためだけに記述しています。確かそのはずです。

ゴミの日をお知らせする機能をつけるための記述は、これで全部です。

おまけ:ゴミの日お知らせ機能の説明をさせてみる

これはおまけ機能といいますか、親切設計にしたい場合にはぜひ、という程度のもの。
なのでこの記述は書かなくても全然問題ありません
完全にお好みなので、書くも書かないもお好きにしてください。

以下のこの記述を追記しておくことで、「ゴミの日お知らせ機能って何してくれるのさ」っていうユーザーさんや、自分でも忘れた時のために、ゴミの日お知らせ機能の説明をゴーストにしゃべらせることもできます。

*ゴミ収集曜日のお知らせ機能_機能説明
:「ごみ収集の曜日」を僕に伝えておいてくれたら、その曜日に僕からお知らせをするよ。

これだけです。
どんな風に説明をさせたいかは各自でお好みな感じで書いてくださいませ。

「説明書」のように詳細な説明を表示させるもよし、ゴーストに説明させるもよし、謎のかけあいだけされて説明してもらえないのもよし、です。

おまけ:whenとifの違い

ここで紹介したゴミの日お知らせの記述では、whenとifの条件分岐が頻繁に登場します。

そこでせっかくなので、whenとifの違いを少し説明させてください。
ちなみに詳しくは里々wikiの「if/when」に説明があるので、ちゃんと知りたい人はそちらをぜひ。

カッコを処理する順番がちがう

まずwhenとifの大きな違いとしてあるのは、その内部処理の行われ方です。
つまりwhenとifは、カッコを処理する順番が異なっているのです。

なおこのふたつの違いはカッコの処理順だけなので、「もし~の時、これをしてくださいね~」という部分は同じです。

まずwhenについて説明しましょう。
whenは、「条件が真(true)か偽(false)か?」という条件分岐を使って、「同じ関数に異なる変数を代入したい」という時に使います。

イメージしやすいよう例をあげると、例えば「今年の誕生日を祝った」という関数の中に、「祝いました」「祝ってません」というどちらかの変数を入れたい、みたいな状況です。
ここでwhenが使われていると、「誕生日を祝ったか祝ってないかどっちなのさ?」と条件分岐処理をしたあとに、「まだ祝ってないな。じゃあ祝ってませんの変数を入れるね」と処理をしてくれる、みたいなイメージですね。

しかし、こういった場合にifを使ってしまうとどうなるかというと……。
ifだと、「関数に変数を代入し終わって」から「条件が真か偽か」を判断してくれちゃうので、条件が真と偽どっちであろうと関数に入れられる値が同じになってしまうのです。

先程の例えでいうと、「今年の誕生日を祝った」という関数の中に「祝いました」という変数を入れたあとに、「さて誕生日を祝ったのか祝ってないのかどっちなの?」っていう条件分岐を発生させる、みたいなイメージです。
なのでifだと、誕生日を祝ってないのにすでに祝ったかのようなトークが発生する、なんて状況になりかねません。

whenとif、違いはカッコの処理順のひとつだけれど、とっても大きな違いです。

ちなみに私の感覚では「とりあえずwhenを使っておけば問題ない」です。
というのも、when/ifを使いたい場面って大体「条件が真と偽どっちであるかを判断して」から「結果を返してください」みたいな場面が、(少なくとも私の中では)多いからです。

ifは、さきほど説明した通り、「先に結果部分の処理をしてしまう」という性質をもっています。

ですので、「同じ関数に異なる変数を代入したい」という場合でなければifでもwhenでも問題ないのですが、普段から「条件分岐にはwhen!」と覚えておいた方が分かりやすいかなって思ってます。

お知らせトークに通知音をつける場合

さて、ここからはゴミの日のお知らせトークに通知音をつけいたいよ!という場合の記述方法を簡単に紹介しておきます。

これは完全にオプション、お好みですので、通知音をつける必要はないよという場合には記述する必要はありません。

通知音をつけるための前準備

通知音をつけるための前準備として、以下のことをやる必要があります。

  1. 音源ファイルを用意する
  2. 音源ファイルの名称を「se」にリネームする(拡張子はmp3でもwavでもOK)
  3. ghost/masterフォルダ内に音源ファイルを置く

まず、通知音を付けたい場合はghost/masterフォルダ内に鳴らしたい通知音の音源ファイルを置いておく必要があります。

この音源ファイルは、ghost/masterフォルダ内のどこかしらに置いてあれば大丈夫です。
新しく音源を入れる用のフォルダを作成しても良いですし、ghost/masterフォルダ内に直に置いてもいいです。

音源が用意できたら、音源を「se」にリネームしてください。

もしも音源ファイルがmp3であれば、「se.mp3」みたいな名称になります。

そして、とりあえず今はghost/masterフォルダ内に直にぽいっと入れておきましょう。

なお、拡張子(.mp3とか.wavという部分)は、書き換える必要はありません
各自ご自分の音源ファイルに合わせてくださいね!

通知音をつけるための記述

音源の用意ができたら、以下のさくらスクリプトを「お知らせトーク」のセリフの文頭に追加しましょう。

\![sound,play,sounds/se.mp3]

追加する位置は、以下の場所(文頭)がおすすめです。こんな感じ。

*ゴミ収集時間が設定されている時のお知らせトーク【タブ】(現在時)<(本日のゴミの日のゴミを出す時間)
\![sound,play/se.mp3]今日は(現在曜日)曜日だ。
(if,(登録したゴミ収集曜日1)==(現在曜日),「(本日のゴミの日のゴミ種類1)」,)φ
(if,(登録したゴミ収集曜日2)==(現在曜日),「(本日のゴミの日のゴミ種類2)」,)φ
(if,(登録したゴミ収集曜日3)==(現在曜日),「(本日のゴミの日のゴミ種類3)」,)φ
(if,(登録したゴミ収集曜日4)==(現在曜日),「(本日のゴミの日のゴミ種類4)」,)φ
(if,(登録したゴミ収集曜日5)==(現在曜日),「(本日のゴミの日のゴミ種類5)」,)φ
(if,(登録したゴミ収集曜日6)==(現在曜日),「(本日のゴミの日のゴミ種類6)」,)φ
を出せる日だよ。
もしゴミを出すなら、(本日のゴミの日のゴミを出す時間)までに出しておくんだよ。

文末に追加しても良いのですが、その場合は「セリフが表示され終わってから」通知音が鳴るようになります。

ちなみに、ghost/masterフォルダ内に新しくフォルダを作成して音源を置いておきたい場合は、以下のようにさくらスクリプトを書いてください。

\![sound,play,sounds/se.mp3]

「sounds」と書いてある部分が、「新しく作成したフォルダの名前」にあたります。
ご自分の環境にあわせて書き換えてくださいませ。

コメント

タイトルとURLをコピーしました