Skip to content

Instantly share code, notes, and snippets.

@tukinami
Last active December 24, 2023 02:31
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save tukinami/c14649fb181cecdc11c4f816a4c88e44 to your computer and use it in GitHub Desktop.

伺かプラグイン「MailBox」用YAYAスクリプト私的メモ その1

起動時にメールステータスチェック、終了時に送信予約を行なうサンプルスクリプト。 無保証です。

  • 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)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment