起動時にメールステータスチェック、終了時に送信予約を行なうサンプルスクリプト。 無保証です。
- MailBox: v1.0.0
- YAYA: Tc571-6
license: CC0
起動処理
// このスクリプトを使用すると、
// `plugin_MailBox_mailStatus_[メールId]`という変数が起動時にできるので、
// それを使って分岐などできるようになります。
// 例(メールidが10のときに既読): plugin_MailBox_mailStatus_10 == 3
// メール本体の書き方は、下の`Plugin_MailBox_Mail_body_*`を参考にしてください。
//
// また、`plugin_MailBox_flag`という変数が0だとメールを送信しなくなります。(既定値はなし==0のときと同じ)
// `On_Plugin_MailBox_start`と`On_Plugin_MailBox_stop`という関数で切り替えられるようにしてありますので、
// 使用してみてください。
OnBoot
{
Plugin_MailBox_BootScript('OnBootEx')
}
OnBootEx
{
// 起動時の処理をここに記入する
OnMenu
}
OnClose
{
On_Plugin_MailBox_sendMails
--
// 終了時の処理をここに記入する
--
'\-\e'
}
切り替え処理
// 切り替え処理はテンプレートゴースト「紺野ややめ」の処理を使用しています。
// 起動時・終了時にメール関連のスクリプトが2回出力されることがありますが、処理に問題はないはずです。
OnGhostChanged
{
Plugin_MailBox_BootScript('OnGhostChangedEx')
}
OnGhostChangedEx
{
AYATEMPLATE.ExecuteChangeCallTalk("OnGhostChanged", "OnBoot")
}
OnGhostChanging
{
On_Plugin_MailBox_sendMails
--
AYATEMPLATE.ExecuteChangeCallTalk("OnGhostChanging", "OnClose")
}
OnGhostCalled
{
Plugin_MailBox_BootScript('OnGhostCalledEx')
}
OnGhostCalledEx
{
AYATEMPLATE.ExecuteChangeCallTalk("OnGhostCalled", "OnBoot")
}
内部処理
On_Plugin_MailBox_start
{
plugin_MailBox_flag = 1
}
On_Plugin_MailBox_stop
{
plugin_MailBox_flag = 0
On_Plugin_MailBox_deleteAllMails
}
On_Plugin_MailBox_checkMails
{
_s = ''
_ids = IARRAY
_funcs = GETFUNCLIST('Plugin_MailBox_Mail_body_')
foreach _funcs; _fn {
_mail_data = EVAL(_fn)
if ARRAYSIZE(_mail_data) > 1 {
_ids ,= _mail_data[0]
}
}
_ids_str = JOIN(_ids, ':')
"\![raiseplugin,MailBox,OnStatusMails,%(_ids_str)]"
}
On_Plugin_MailBox_resetMails
{
_s = ''
_vars = GETVARLIST('plugin_MailBox_mailStatus_')
foreach _vars; _var {
_mail_id = TOINT(REPLACE(_var, 'plugin_MailBox_mailStatus_', ''))
_s += "\![notifyplugin,MailBox,OnDeleteMailNotArrive,%(_mail_id)]"
}
_s
}
On_Plugin_MailBox_sendMails
{
if plugin_MailBox_flag == 0 {
return
}
_s = ''
_funcs = GETFUNCLIST('Plugin_MailBox_Mail_body_')
foreach _funcs; _fn {
_mail_data = EVAL(_fn)
if ARRAYSIZE(_mail_data) > 1 {
_mail_data_str = JOIN(_mail_data, ',')
_s += "\![notifyplugin,MailBox,OnSendMailNotArrive,%(_mail_data_str)]"
}
}
_s
}
On_Plugin_MailBox_deleteAllMails
{
_s = ''
_ids = IARRAY
_vars = GETVARLIST('plugin_MailBox_mailStatus_')
foreach _vars; _var {
_mail_id = TOINT(REPLACE(_var, 'plugin_MailBox_mailStatus_', ''))
_s += Plugin_MailBox_Mail_delete_fromId(_mail_id)
}
_s
}
Plugin_MailBox_BootScript
{
_refs = IARRAY
// CHR(34) -> ", CHR(39) -> '
foreach reference; _r {
_refs ,= CHR(34) + REPLACE(_r, CHR(34), CHR(39)) + CHR(34)
}
_ref = JOIN(_refs, ',')
'\![embed,On_Plugin_MailBox_checkMails]'
--
'\![embed,On_Plugin_MailBox_resetMails]'
--
"\![embed,%(_argv[0]),%(_refs)]"
}
Plugin_MailBox_Mail_delete_fromId
{
_mail_id = TOINT(_argv[0])
EVAL("plugin_MailBox_mailStatus_%(_mail_id)=0")
"\![notifyplugin,MailBox,OnDeleteMail,%(_mail_id)]"
}
OnMailsStatus
{
_mail_ids = SPLIT(reference[0], ':')
_mail_statuses = SPLIT(reference[1], ':')
_len = ARRAYSIZE(_mail_ids)
for _i = 0; _i < _len; _i++ {
_mail_id = TOINT(_mail_ids[_i])
_status = TOINT(_mail_statuses[_i])
EVAL("plugin_MailBox_mailStatus_%(_mail_id)=%(_status)")
}
}
メール本体
// -------------------------------------------------------------------
// Plugin_MailBox_Mail_body_*
// -------------------------------------------------------------------
// 条件つきで、条件に当て嵌らないときは空配列を返す
// test
Plugin_MailBox_Mail_body_1 : array
{
_id = 1
_date_raw = GETTIME()
_sender = 'Tester'
_title = 'はじめてのメール'
_contents = 'どうだろう、ちゃんと届いてる?'
_id
_date_raw[0]
_date_raw[1]
_date_raw[2]
_sender
_title
_contents
}
Plugin_MailBox_Mail_body_2 : array
{
_id = 2
_date_raw = GETTIME()
_sender = 'Tester'
_title = 'メールのテスト 2'
_contents = 'どうだろう、ちゃんと届いてる?2'
_id
_date_raw[0]
_date_raw[1]
_date_raw[2]
_sender
_title
_contents
}
Plugin_MailBox_Mail_body_3 : array
{
_id = 3
// おまけ参照。一日後
_date_raw = Time_after_day(GETSECCOUNT(), 1)
_sender = 'Tester'
_title = 'メールのテスト 3'
_contents = 'どうだろう、ちゃんと届いてる?3'
_id
_date_raw[0]
_date_raw[1]
_date_raw[2]
_sender
_title
_contents
}
// おまけ
/* UNIX TIMEから第2引数日経過後の日付の汎用配列を返す。
@param int 基準となる時間。UNIX TIME(秒)
@param int 経過させたい日数。日
@return array 日付を表す汎用配列。(GETTIME関数の返り値と同じ) */
Time_after_day : array
{
_base = TOINT(_argv[0])
_target = TOINT(_argv[1]) * 60 * 60 * 24
GETTIME(_base + _target)
}