6月 7:ohayoo:
週課のジョギング!
と言っても諸事情で3週間ぶりになっちゃったけど

6月 5FFTのリマスター出るんか
リマスターとかあまり興味なかったけど、FFTはもう一回やりたいから買いたいなぁ
算術無双は変わらずなんだろうか
そして源氏シリーズは盗めるのだろうかw
6月 2今回の攻撃エフェクト集は
2025/04/18~2025/05/21 実装のキャラ!
https://youtu.be/HUKoMUbKZcQ
#クルスタ #ティンクルスターナイツ
5月 17:ohayoo:
週課のジョギング!
2週連続の雨の中のジョギング…
来週は晴れるといいなぁ

7月 10, 2024凝り出したら改修が止まらない
殆ど見ることはないと思うんだけどw
7月 9, 2024色々バグはあるだろうな
使ってて気になるところは修正して後でちゃんとページにまとめよう(いつになるやら
7月 9, 2024/// @ 0.18.0
/// 文字数カウンターを表示するだけです
let SCOPE:arr<str> = ['LetterCounter']
let g = {
registry: {}
counter: {}
}
@getCounter():void {
let domains = []
g.registry = {}
g.counter = {}
let targetScope = SCOPE.concat([USER_ID])
let targetScopeLen = targetScope.len
let res1 = Mk:api('i/registry/scopes-with-domain', {})
if (Core:type(res1) == 'error') {
return false
}
each(let registry, res1) {
let found = registry.scopes.some(@(scope, sIndex) {
return (scope.len == targetScopeLen && scope.every(@(item, iIndex){ return item == targetScope[iIndex] }))
})
if (found) {
domains.push(registry.domain)
Obj:set(g.registry, registry.domain, {})
}
}
each(let domain, domains) {
Core:sleep(500)
let res2 = Mk:api('i/registry/get-all', { domain: domain, scope: targetScope })
if (Core:type(res2) == 'error') continue
each(let kv, Obj:kvs(res2)) {
Obj:set(Obj:get(g.registry, domain), kv[0], kv[1])
if (Obj:get(g.counter, kv[0]) == null) {
Obj:set(g.counter, kv[0], { note: 0, letter: 0})
}
let data = Obj:get(g.counter, kv[0])
data.note += kv[1].note
data.letter += kv[1].letter
}
}
return true
}
@uiCounterAll():obj {
let result = []
each(let kv, Obj:kvs(g.counter)) {
result.push(uiCounter(kv[0], kv[1]))
}
return result
}
@uiCounter(date:str, data:obj):obj {
return Ui:C:mfm({
text: `{date}: {data.note}<small>ノート </small>{data.letter}<small>文字</small>`
})
}
@consolidateRegistry():void {
let domains = Obj:keys(g.registry)
if (domains.len <= 1) {
return true
}
let targetDomain = domains[domains.len - 1]
let targetScope = SCOPE.concat([USER_ID])
domains.pop()
each(let domain, domains) {
each(let kv, Obj:kvs(Obj:get(g.registry, domain))) {
let date = kv[0]
let counter = kv[1]
let counter2 = Obj:get(Obj:get(g.registry, targetDomain), date)
if (counter2 != null) {
counter.note += counter2.note
counter.letter += counter2.letter
}
Core:sleep(500)
let response = Mk:api('i/registry/set', {
domain: targetDomain
scope: targetScope
key: date
value: counter
})
if (Core:type(response) != 'error') {
Core:sleep(500)
Mk:api('i/registry/remove', { domain: domain, scope: targetScope, key: date })
}
}
}
}
@uiDomain():obj {
let result = []
let domainCount = Obj:keys(g.registry).len
result.push(
Ui:C:mfm({text: `<small>データ保存レジストリ: {domainCount} ドメイン</small>`})
)
if (domainCount > 1) {
result.push(
Ui:C:button({
text: '最新ドメインへ集約'
onClick: consolidateRegistry
})
)
}
return result
}
@renderAll():void {
uiDomain()
Ui:render(
uiCounterAll().concat(uiDomain())
)
}
@main():void {
if (getCounter()) {
renderAll()
}
}
main()

7月 9, 2024/// @ 0.18.0
### {
name: '文字数カウンター'
version: 1
author: '@crpmrtl@misskey.io'
description: '投稿ノートの文字数をカウントするだけです。ノートを削除してもカウントは減らせません。'
permissions: [
'read:account'
'write:account'
]
}
/*******************************************************************************
* 定数
*******************************************************************************/
let SCOPE:arr<str> = ['LetterCounter']
// domainは無視されるが将来のことを考えて設定しておく
let DOMAIN:str = '@crpmrtl@misskey.io'
let DELAY:num = 100
let STR_ERR_H:str = '文字数カウンター エラー'
let STR_ERR:str = 'エラーが発生して文字数カウントが出来ませんでした'
/*******************************************************************************
* 便利関数
*******************************************************************************/
:: Util {
/** デバッグ出力するかどうか */
let debug_:bool = false
/**
* debug=trueの場合に標準出力に出力する
* @param obj 出力するデータ
*/
let debug:void = @(obj:obj) {
if (debug_) {
print(obj)
}
}
}
/*******************************************************************************
* 関数定義
*******************************************************************************/
@countUp(note) {
Util:debug(`countUp: {Json:stringify(note)}`)
let scope = SCOPE.concat([USER_ID])
let date = Date:to_iso_str(Date:now(), 0).slice(0, 10)
var response = Mk:api('i/registry/get', {
key: date
scope: scope
domain: DOMAIN
})
let count = {
note: 0
letter: 0
}
if (Core:type(response) == 'error') {
Util:debug(`{response.name}, {response.info}`)
if (response.info.code != 'NO_SUCH_KEY') {
Mk:dialog(STR_ERR_H, STR_ERR)
return null
}
} else {
Util:debug(Json:stringify(response))
count.note = response.note
count.letter = response.letter
}
var letter = 0
if (note.text != null) letter += note.text.len
if (note.cw != null) letter += note.cw.len
count.note += 1
count.letter += letter
response = Mk:api('i/registry/set', {
key: date
scope: scope
domain: DOMAIN
value: count
})
if (Core:type(response) == 'error') {
Util:debug(`{response.name}, {response.info}`)
Mk:dialog(STR_ERR_H, STR_ERR)
return null
} else {
Util:debug(Json:stringify(response))
}
}
/*******************************************************************************
* メイン処理
*******************************************************************************/
Plugin:register_note_post_interruptor(@(note){
Async:timeout(DELAY, @(){ countUp(note) })
return note
})
7月 9, 2024多分上手く出来たっぽい?
7月 9, 2024Pluginで割り当てられたdomain
は i/registry/scopes-with-domain
で一致するscope
探すことで見つけることは出来るけど、コレジャナイ感
ま、試しにやってみるけどw
@crape@www.crape.org 返信のテスト