Skip to content

Instantly share code, notes, and snippets.

@tukinami
Last active December 21, 2023 23:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tukinami/790d26a262dae11dfd37470bbff365ad to your computer and use it in GitHub Desktop.
Save tukinami/790d26a262dae11dfd37470bbff365ad to your computer and use it in GitHub Desktop.

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

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

  • MailBox: v1.0.0
  • 里々: phase Mc169-3

license: CC0

satori_conf.txtに追記

#送信するメールのId。`:`区切り。
#「MailBoxメール本体」と数値を一致させること。
#ここで設定した数値と同じ「MailBoxメール本体」が送信予約時チェックされる。
$MailBoxメールIdリスト=1:2:3

#MailBoxフラグが1だとMailBox関連の処理をする。0だとしない。
$MailBoxフラグ	1

#また、フラグが1だと、MailBoxメールステータス+メールId(半角数値)、
#という変数が更新されるので、分岐に使用したりしてみてください。
#変数例: メールIdが10、ステータスが3(届いていて既読)の場合
#(MailBoxメールステータス10)==3
*OnBoot
\b[-1]\![embed,On_MailBox_CheckMailStatuses]\![embed,On_MailBox_DeleteBookedMails]\![embed,OnBootEx,(call,joinReferences関数,7)]

#起動時スクリプトをここに記入する
*OnBootEx
:起動
:起動

#終了時時スクリプトをここに記入する
#p[1]側にスクリプトの出力が残っているので、\cで消してから話しはじめてください。
*OnClose
(On_MailBox_SendNewMails)
:終了
:\c終了

*OnGhostChanged
(when,(文「(R0)から変更」の存在),
	\b[-1]\![embed,On_MailBox_CheckMailStatuses]\![embed,On_MailBox_DeleteBookedMails]
)\![embed,OnGhostChangedEx,(call,joinReferences関数,7)]

*OnGhostChangedEx
>(R0)から変更
>OnBoot

#○○というゴーストから変更されたときのスクリプトを記入
*○○から変更
:○○さんから切り替え。
:ありがとうございました。

*OnGhostChanging
(
	when,(文「(R0)へ変更」の存在),(On_MailBox_SendNewMails)\c
)\![embed,OnGhostChangingEx,(call,joinReferences関数,3)]

*OnGhostChangingEx
>(R0)へ変更
>OnClose

#○○というゴーストへ変更するときのスクリプトを記入
*○○へ変更
:○○さんへ切り替え。
:よろしくお願いします。
#メール本体
#メール本体
#「MailBoxメール本体」+「半角数値(送信するメールのId)」という規則で命名すること
#送信予約時にチェックされる。
#実際に送信するかはスクリプトの中身による。
*MailBoxメール本体1
\![notifyplugin,MailBox,OnSendMailNotArrive,1,(現在年),(現在月),(現在日),testsender1,testtitle1,testcontent1]

*MailBoxメール本体2
\![notifyplugin,MailBox,OnSendMailNotArrive,2,(現在年),(現在月),(現在日),testsender2,testtitle2,testcontent2]

*MailBoxメール本体3
\![notifyplugin,MailBox,OnSendMailNotArrive,3,(現在年),(現在月),(現在日),testsender3,testtitle3,testcontent3]

ここから下はコピー&ペースト推奨

*OnMailsStatus
$今回は喋らない	有効
(nop,(call,splitArray関数,(R0),:,MailBoxステータスId))
(nop,(call,splitArray関数,(R1),:,MailBoxステータスStatus))
(nop,(while,(変数「MailBoxステータスId(C0)」の存在),(call、MailBoxステータスset関数、(MailBoxステータスId(C0))、(MailBoxステータスStatus(C0)))))

#メール配信を停止したいときに呼んでください。
@On_MailBox_メール配信停止
(
	set,MailBoxフラグ,0
)(
	nop,(call,splitArray関数,(MailBoxメールIdリスト),:,MailBoxメールIdリスト配列)
)(
	while,(変数「MailBoxメールIdリスト配列(C0)」の存在),(
	call、MailBoxステータスset関数、(MailBoxメールIdリスト配列(C0))、0)\![notifyplugin,MailBox,OnDeleteMail,(zen2han、(MailBoxメールIdリスト配列(C0)))]
)

#メール配信を開始したいときに呼んでください。
@On_MailBox_メール配信開始
(set,MailBoxフラグ,1)

@On_MailBox_CheckMailStatuses
\![raiseplugin,MailBox,OnStatusMails,(zen2han、(MailBoxメールIdリスト))]

@On_MailBox_DeleteBookedMails
(
	nop,(call,splitArray関数,(MailBoxメールIdリスト),:,MailBoxメールIdリスト配列)
)(
	while,(変数「MailBoxメールIdリスト配列(C0)」の存在),(
	call、MailBoxメール予約停止関数、(MailBoxメールIdリスト配列(C0)))
)

@On_MailBox_SendNewMails
(
	when(バイト値,1)(MailBoxフラグ)==1(バイト値,1)(
	nop,(call,splitArray関数,(MailBoxメールIdリスト),:,MailBoxメールIdリスト配列)
)(
	while,(変数「MailBoxメールIdリスト配列(C0)」の存在),(
	call、MailBoxメール送信関数、(MailBoxメールIdリスト配列(C0))))
)

#一時変数を大量に作るので、セーブデータが気になるひとは、このイベントを`OnSatoriUnload`で呼んでください。
@On_MailBox_EraseTempVariables
(
	nop,(while,(変数「MailBoxステータスId(C0)」の存在),(
	set、MailBoxステータスId(C0)、)(
	set、MailBoxステータスStatus(C0)、))
)(
	nop,(while,(変数「MailBoxメールIdリスト配列(C0)」の存在),(set、MailBoxメールIdリスト配列(C0)、))
)

@MailBoxメール確認関数
\![notifyplugin,MailBox,OnStatusMail,(zen2han,(A0))]

@MailBoxメール送信関数
(MailBoxメール本体(A0))

@MailBoxメール予約停止関数
\![notifyplugin,MailBox,OnDeleteMailNotArrive,(zen2han、(A0))]

#A0: メールId
#A1: ステータス
@MailBoxステータスset関数
(set,MailBoxメールステータス(zen2han,(A0)),(A1))

#A0: 分割する文字列
#A1: 区切り文字列
#A2: 配列として扱う変数名
@splitArray関数
(
	set,SAORI引数の計算,無効
)(
	nop,(vncall,split,A0,A1)
)(
	set,splitArray関数S,(Sの数)
)(
	nop,(times,(splitArray関数S),(set,(A2)(C0),(S(C0))))
)(
	set,splitArray関数S,
)(
	set,SAORI引数の計算,自動
)

#A0: Referenceが確実にどこまであるか
@joinReferences関数
(
	set,SAORI引数の計算,無効
)(
	set,joinReferencesTemp,(call、joinReferences関数body、(A0))
)(
	call,erase_first,(joinReferencesTemp),φ,
)(
	set,joinReferencesTemp,
)(
	set,SAORI引数の計算,自動
)

@joinReferences関数body
(
	times,(A0),(vncall,joinReferences関数Element,R(C0))
)(
	while,(変数「R(C0)」の存在),(A0),(
	vncall,joinReferences関数Element,R(C0))
)

@joinReferences関数Element
,(バイト値,34)(replace,(A0),(バイト値,34),(バイト値,39))(バイト値,34)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment