【コピペで作る】伺か 起動時に一緒に天気予報も教えてもらう。【yaya】
ukagaka前回
【コピペで作る】伺か 起動トークを今の時間や曜日で分岐させる。【YAYA】の続きです。
今回
以前作った 【コピペで作る】伺か ゴーストに天気予報を教えてもらう。【yaya】 — 異風堂々を利用して、起動時or終了時に天気予報を表示できるようにします。
この際、条件を満たしたときのみ通常トークに追加する形で発言させます。
実装内容
- 天気メニューに起動or終了時に天気を取得する設定画面を実装
- 起動時、設定次第で、天気の通知
- 通知は当日中、最初に起動したときのみにする。
自動実行設定項目の追加
以前作成したメニューに自動実行の設定を追加します。
weather_menu {
"\_q/
\n[half]/
\![*]\q[今の天気,CallWeather]\n/
\![*]\q[天気の設定,setting_weather]\n/
\![*]\q[天気設定の確認,weather_check]\n/
\![*]\q[天気設定の削除,delete_weather]\n/
\![*]\q[自動実行の設定,weatherFlagMenu]\n/
\![*]\q[特にない,]\n/
\n[half]\e"
}
おなじくdic_Weather.uka
に下記を追加します。
weatherFlagMenu {
"\_q/
\n[half]/
\![*]\q[自動実行しない ,weatherFlagFunc,0]\n/
\![*]\q[起動時実行 ,weatherFlagFunc,1]\n/
\![*]\q[終了時実行 ,weatherFlagFunc,2]\n/
\![*]\q[起動と終了時実行,weatherFlagFunc,3]\n/
\n[half]\e"
}
weatherFlagFunc {
WeatherFlag = Global_arg1
"フラグ設定 : %( WeatherFlag )"
}
実際に分岐するように変更する。
以前作成したdic_Hello.uka
のHelloWorld関数を編集します。
また、新しくGetHelloComment関数を作成します。
HelloWorld {
_mainText = GetHelloComment()
_subText = ""
_text = ""
//自動が有効ならば
if ( WeatherFlag == 1 ) || ( WeatherFlag == 3 ) {
_subText = CallWeather
}
_text = _mainText + _subText
_text
}
GetHelloComment {
//それぞれ適当なセリフが返るようにしておいてください。
WeekComment()
HelloComment()
}
これで起動時に設定次第で天気の情報を追加で発言してくれるようになります。
天気の設定から、起動時に実行するように設定してみてください。
一日に一度だけ実行できるようにする。
日付を比較できるようにする
新しくdic_MyFunction.uka
を追加してyaya.txtに登録します。
下記をコピペしましょう。
// 1 : 今日初めての起動
// 0 : 今日二回目以降の起動。
OnLoadCheckSameDay {
if ( ISVAR( "OldToDay" ) == 0 ) {
OldToDay = "Old"
}
if ( ToDay() != OldToDay ) {
SameDayFlag = 1
OldToDay = ToDay()
} else {
SameDayFlag = 0
}
}
// mm月dd日
ToDay {
_m = "%(month)"
if ( 10 > month ) {
_m = "0" + "%(month)"
}
_d = "%(day)"
if ( 10 > day ) {
_d = "0" + "%(day)"
}
_m + "月" + _d + "日"
}
起動時に自動で処理されるようにdic_Boot.uka
のOnGhostLoad関数に追記します。
OnGhostLoad {
//ssp/ghost/ghost_name/ghost/master
GHOSTPATH = REPLACE( SHIORI3FW.Path , '\' , '/' )
LoadMouseStroke
//今回追記する2行
// dic_MyFunction.uka
OnLoadCheckSameDay
}
実際に分岐されるように
先ほど書き換えたhelloWorld関数の天気を取得する条件をさらに追加します。
HelloWorld {
_mainText = GetHelloComment()
_subText = ""
_text = ""
//一日一回のみ処理する
if ( SameDayFlag == 1 ) {
//自動が有効ならば
if ( WeatherFlag == 1 ) || ( WeatherFlag == 3 ) {
_subText = CallWeather
}
}
_text = _mainText + _subText
_text
}
終了時にも処理されるようにする。
せっかくなので終了時の処理を独立させます。
新しくdic_Bye.ukaを作成し、yaya.txtに登録しましょう。
dic_Bye.ukaに下記をコピペします。
ByeBye {
_mainText = ""
_subText = ""
_endText = "じゃぁねー \w9\w9\w9\-\e"
_text = ""
//天気関係
if ( WeatherFlag == 2 ) || ( WeatherFlag == 3 ) {
_subText = CallWeather
}
_text = _mainText + _subText + _endText
_text
}
dic_Boot.ukaのOnClose関数をこのように書き換えたら完了です。
OnClose {
// dic_Bye.uka
ByeBye()
}
終了時、この例だと一日に何度でも実行されます。
必要でしたら、HelloWorldからif文だけ持ってくると適用できます。
新しい設定メニューを作成して一日に一度だけ実行する処理をon/offできるようにしてみても面白いでしょう。
次回予定
エラー時の処理が楽になる、エマージェンシーモードを理解する。
【伺か】エマージェンシーモードを活用する。【YAYA】