ai/at
1
0

Compare commits

..

5 Commits

Author SHA1 Message Date
ded3110fce update scpt 2025-06-01 01:06:24 +09:00
6f4712e461 add lex 2025-05-27 01:21:35 +09:00
bd3299154c add item 2025-05-12 02:33:03 +09:00
8b97cbfd9b add ozone 2025-05-06 18:53:56 +09:00
246f95a00c fix scpt 2025-05-05 08:35:11 +09:00
49 changed files with 575 additions and 88 deletions

38
.github/workflows/generate-record.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: Generate Record JSON
on:
workflow_dispatch: # 手動トリガー
push:
paths:
- scpt/generate_record.py # スクリプトに変更があったとき
schedule:
- cron: '0 3 * * *' # 毎日03:00 UTCに自動生成任意
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install Dependencies
run: |
pip install -r requirements.txt || true # 必要なら
- name: Run Record Generator Script
run: |
python scpt/generate_record.py
- name: Commit and Push Generated JSON
run: |
git config --global user.name "GitHub Actions Bot"
git config --global user.email "actions@github.com"
git add record.json
git commit -m "🧬 Auto-generate record.json" || echo "No changes to commit"
git push origin main

View File

@ -67,38 +67,6 @@ services:
database: database:
condition: service_healthy condition: service_healthy
ozone:
build:
context: ./repos/atproto/
dockerfile: services/ozone/Dockerfile
ports:
- 2585:3000
restart: always
command: node --enable-source-maps api.js
volumes:
- ./data/ozone/:/data/
env_file:
- ./envs/ozone
depends_on:
database:
condition: service_healthy
ozone-daemon:
build:
context: ./repos/atproto/
dockerfile: services/ozone/Dockerfile
restart: always
command: node --enable-source-maps daemon.js
volumes:
- ./data/ozone/:/data/
env_file:
- ./envs/ozone
depends_on:
database:
condition: service_healthy
ozone:
condition: service_healthy
social-app: social-app:
ports: ports:
- 8100:8100 - 8100:8100
@ -128,3 +96,53 @@ services:
condition: service_healthy condition: service_healthy
redis: redis:
condition: service_healthy condition: service_healthy
jetstream:
build:
context: ./repos/jetstream/
dockerfile: Dockerfile
ports:
- 6008:6008
volumes:
- ./data/jetstream:/data
restart: always
env_file:
- ./envs/jetstream
ozone-web:
build:
context: ./repos/ozone/
ports:
- 2586:3000
restart: always
volumes:
- ./data/ozone/:/data/
env_file:
- ./envs/ozone
depends_on:
database:
condition: service_healthy
ozone:
build:
context: ./repos/atproto/
dockerfile: services/ozone/Dockerfile
ports:
- 2585:3000
restart: always
command: node --enable-source-maps api.js
volumes:
- ./data/ozone/:/data/
env_file:
- ./envs/ozone
ozone-daemon:
build:
context: ./repos/atproto/
dockerfile: services/ozone/Dockerfile
restart: always
command: node --enable-source-maps daemon.js
volumes:
- ./data/ozone/:/data/
env_file:
- ./envs/ozone

5
envs/jetstream Normal file
View File

@ -0,0 +1,5 @@
JETSTREAM_WS_URL=wss://bgs.${host}/xrpc/com.atproto.sync.subscribeRepos
JETSTREAM_DATA_DIR=/data
JETSTREAM_LISTEN_ADDR=:6008
JETSTREAM_METRICS_LISTEN_ADDR=:6009
JETSTREAM_LIVENESS_TTL=96h

View File

@ -19,3 +19,9 @@ OZONE_DB_MIGRATE=1
OZONE_ADMIN_PASSWORD OZONE_ADMIN_PASSWORD
OZONE_SIGNING_KEY_HEX OZONE_SIGNING_KEY_HEX
OZONE_BLOB_DIVERT_ADMIN_PASSWORD
OZONE_VERIFIER_URL
OZONE_VERIFIER_DID
OZONE_VERIFIER_PASSWORD
OZONE_VERIFIER_ISSUERS_TO_INDEX
OZONE_VERIFIER_JETSTREAM_URL

View File

@ -1,7 +1,7 @@
#!/bin/zsh #!/bin/zsh
# ./install.zsh $HOST # ./install.zsh $HOST
repos_v='{}'
function at-repos-env() { function at-repos-env() {
host=$1 host=$1
if [ -z "$1" ];then if [ -z "$1" ];then
@ -16,6 +16,7 @@ function at-repos-env() {
https://github.com/bluesky-social/social-app https://github.com/bluesky-social/social-app
https://github.com/bluesky-social/feed-generator https://github.com/bluesky-social/feed-generator
https://github.com/bluesky-social/ozone https://github.com/bluesky-social/ozone
https://github.com/bluesky-social/jetstream
) )
d=${0:a:h} d=${0:a:h}
dh=${0:a:h:h} dh=${0:a:h:h}
@ -56,6 +57,7 @@ function at-repos-clone() {
echo $repo echo $repo
if [ ! -d $d/repos/${repo##*/} ];then if [ ! -d $d/repos/${repo##*/} ];then
git clone $repo git clone $repo
fi fi
done done
if [ ! -f $d/repos/feed-generator/Dockerfile ] && [ -f $d/docker/feed/Dockerfile ];then if [ ! -f $d/repos/feed-generator/Dockerfile ] && [ -f $d/docker/feed/Dockerfile ];then
@ -75,6 +77,12 @@ function at-repos-pull() {
at-repos-clone at-repos-clone
fi fi
fi fi
rv=$(echo "$repos_v" | jq -r ".[\"${repo##*/}\"]")
if [ "$rv" != "null" ];then
cd $d/repos/${repo##*/}
git reset --hard $rv
cd ..
fi
done done
cd $d cd $d
} }
@ -92,12 +100,12 @@ function at-repos-social-app-icon-origin() {
} }
function at-repos-social-app-write() { function at-repos-social-app-write() {
did_admin=did:plc:z72i7hdynmk6r22z27h6tvur did_admin=did:plc:6qyecktefllvenje24fcxnie
dt=$d/repos/social-app/src dt=$d/repos/social-app/src
cd $dt cd $dt
grep -R bsky.social .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.social/${host}/g" grep -R syu.is .|cut -d : -f 1|sort -u|xargs sed -i "s/syu.is/${host}/g"
grep -R bsky.app .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.app/web.${host}/g" grep -R web.syu.is .|cut -d : -f 1|sort -u|xargs sed -i "s/web.syu.is/web.${host}/g"
f=$dt/lib/constants.ts f=$dt/lib/constants.ts
sed -i "s/public.api.web/bsky/g" $f sed -i "s/public.api.web/bsky/g" $f
f=$dt/view/icons/Logotype.tsx f=$dt/view/icons/Logotype.tsx
@ -106,11 +114,11 @@ function at-repos-social-app-write() {
f=$dt/view/com/util/UserAvatar.tsx f=$dt/view/com/util/UserAvatar.tsx
curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/view/com/util/UserAvatar.tsx -o $f curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/view/com/util/UserAvatar.tsx -o $f
sed -i "s#/img/avatar/plain/#https://cdn.bsky.app/img/avatar/plain/#g" $f sed -i "s#/img/avatar/plain/#https://cdn.web.syu.is/img/avatar/plain/#g" $f
sed -i "s#/img/avatar_thumbnail/plain/#https://bsky.${host}/img/avatar/plain/#g" $f sed -i "s#/img/avatar_thumbnail/plain/#https://bsky.${host}/img/avatar/plain/#g" $f
sed -i "s#source={{uri: avatar}}#source={{ uri: hackModifyThumbnailPath(avatar, 1 > 0), }}#g" $f sed -i "s#source={{uri: avatar}}#source={{ uri: hackModifyThumbnailPath(avatar, 1 > 0), }}#g" $f
curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/lib/strings/url-helpers.ts -o $dt/lib/strings/url-helpers.ts curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/lib/strings/url-helpers.ts -o $dt/lib/strings/url-helpers.ts
sed -i "s#https://go.bsky.app/redirect?u=\${encodeURIComponent(url)}#\${url}#g" $dt/lib/strings/url-helpers.ts sed -i "s#https://go.web.syu.is/redirect?u=\${encodeURIComponent(url)}#\${url}#g" $dt/lib/strings/url-helpers.ts
grep -R $did_admin .|cut -d : -f 1|sort -u|xargs sed -i "s/${did_admin}/${did}/g" grep -R $did_admin .|cut -d : -f 1|sort -u|xargs sed -i "s/${did_admin}/${did}/g"
} }
@ -123,7 +131,7 @@ function at-repos-bsky-patch() {
if [ ! -f ${p_} ];then if [ ! -f ${p_} ];then
# https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff # https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff
echo download patch: https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff echo download patch: https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff
curl -sLO https://raw.githubusercontent.com/itaru2622/bluesky-selfhost-env/refs/heads/master/patching/105-atproto-services-for-docker.diff curl -sL https://raw.githubusercontent.com/itaru2622/bluesky-selfhost-env/refs/heads/master/patching/105-atproto-services-for-docker.diff -o ${p_}
else else
echo local patch echo local patch
fi fi
@ -163,6 +171,8 @@ function at-repos-ozone-patch() {
pushd ${d_} pushd ${d_}
patch -p1 < ${p_} patch -p1 < ${p_}
popd popd
#cp -rf $d/repos/atproto/service/ozone/* $d/ozone/service/
} }
function at-repos-docker() { function at-repos-docker() {
@ -180,10 +190,12 @@ at-repos-bsky-patch
at-repos-social-app-patch at-repos-social-app-patch
at-repos-ozone-patch at-repos-ozone-patch
echo "[y]docker compose build && up" at-repos-docker
read key #echo "[y]docker compose build && up"
case $key in #read key
[yY]) #case $key in
at-repos-docker # [yY])
;; # at-repos-docker
esac # ;;
#esac

BIN
item/card/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
item/card/0.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
item/card/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 KiB

BIN
item/card/1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
item/card/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 KiB

BIN
item/card/10.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
item/card/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 KiB

BIN
item/card/11.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
item/card/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

BIN
item/card/12.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
item/card/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

BIN
item/card/13.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
item/card/135.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
item/card/135.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
item/card/136.mp4 Normal file

Binary file not shown.

BIN
item/card/136.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
item/card/136.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

BIN
item/card/14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

BIN
item/card/14.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
item/card/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
item/card/2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
item/card/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 KiB

BIN
item/card/3.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
item/card/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 KiB

BIN
item/card/4.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
item/card/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

BIN
item/card/5.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
item/card/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 KiB

BIN
item/card/6.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
item/card/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 KiB

BIN
item/card/7.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
item/card/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

BIN
item/card/8.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
item/card/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 KiB

BIN
item/card/9.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

38
item/card/readme.md Normal file
View File

@ -0,0 +1,38 @@
# card
カードの仕様を決定します。
基本的に`3:4``1620x2160`で生成していましたが、`4:5``1080x1350`で生成することにしました。これはwindows動画編集が4:5にしか対応していないからです。`.mov`から動画編集で`.mp4`に変換し、それを`.webp`にします。
comfyuiの動画生成はカードの大きさではなかなか思うような動画が作れませんでした。やはり`1920x1080(1080p)`からの生成が最適でした。
- [16:9] 1920x1080 (1080p)
- [16:9] 1280×720 (720p)
- [16:9] 854x480 (480p)
- [4:3] 2160x1620
- [4:3] 1440x1080
- [4:3] 1024×768
- [4:3] 640×480
- [4:5] 2025x1620
- [4:5] 1536x2048
- [4:5] 1080x1350
```bash
$ magick convert -resize 480x -quality 100 4.png 4.webp
$ magick convert -quality 100 1.png 1.webp
$ magick convert -size 1620x2160 xc:white 1080p.png
$ magick convert -resize 1080x -quality 100 1.png 1.webp
```
```sh
$ ffmpeg -i 4.mp4 -vf "fps=15,setpts=PTS/4" -c:v libwebp -loop 1 -quality 100 4.webp
```
## list
<img src="https://git.syui.ai/ai/ai/raw/branch/main/card/1.webp" width="200px">
<img src="https://git.syui.ai/ai/ai/raw/branch/main/card/2.webp" width="200px">
<img src="https://git.syui.ai/ai/ai/raw/branch/main/card/3.webp" width="200px">
<img src="https://git.syui.ai/ai/ai/raw/branch/main/card/4.webp" width="200px">

153
lex/ai.syui.system.json Normal file
View File

@ -0,0 +1,153 @@
{
"lexicon": 1,
"id": "ai.syui.system",
"revision": 1,
"description": "Syui's system definitions for game logic and metaphysics",
"defs": {
"main": {
"type": "record",
"record": {
"key": "self",
"recordType": "document",
"schema": {
"type": "object",
"required": ["card", "system"],
"properties": {
"card": {
"type": "array",
"items": { "$ref": "#card" }
},
"system": {
"type": "array",
"items": { "$ref": "#system" }
},
"weapon": {
"type": "array",
"items": { "$ref": "#weapon" }
},
"ability": {
"type": "array",
"items": { "$ref": "#ability" }
},
"character": {
"type": "array",
"items": { "$ref": "#character" }
}
}
}
}
},
"card": {
"type": "object",
"required": ["id", "img", "name", "lang"],
"properties": {
"id": { "type": "integer" },
"img": { "type": "string" },
"name": { "type": "string" },
"lang": {
"type": "object",
"properties": {
"ja": {
"type": "object",
"properties": {
"name": { "type": "string" },
"text": { "type": "string" }
}
}
}
}
}
},
"system": {
"type": "object",
"required": ["id", "enum", "name", "lang"],
"properties": {
"id": { "type": "integer" },
"enum": {
"type": "array",
"items": { "type": "string" }
},
"name": { "type": "string" },
"alias": {
"type": "array",
"items": { "type": "string" }
},
"lang": {
"type": "object",
"properties": {
"ja": { "type": "string" }
}
},
"description": { "type": "string" }
}
},
"weapon": {
"type": "object",
"required": ["id", "img", "name", "lang"],
"properties": {
"id": { "type": "integer" },
"img": { "type": "string" },
"name": { "type": "string" },
"lang": {
"type": "object",
"properties": {
"ja": {
"type": "object",
"properties": {
"name": { "type": "string" },
"text": { "type": "string" }
}
}
}
}
}
},
"ability": {
"type": "object",
"required": ["id", "name", "color"],
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"lang": {
"type": "object",
"properties": {
"ja": { "type": "string" }
}
},
"color": { "type": "string" },
"group": {
"type": "array",
"items": { "type": "string" }
},
"duration": { "type": "integer" },
"multiplier": {
"type": "object",
"additionalProperties": { "type": "number" }
}
}
},
"character": {
"type": "object",
"required": ["id", "name", "lang"],
"properties": {
"id": { "type": "integer" },
"img": { "type": "string" },
"name": { "type": "string" },
"lang": {
"type": "object",
"properties": {
"ja": {
"type": "object",
"properties": {
"name": { "type": "string" },
"text": { "type": "string" },
"description": { "type": "string" }
}
}
}
},
"text": { "type": "string" }
}
}
}
}

View File

@ -4,6 +4,7 @@ d=${0:a:h}
source $d/src/tag.zsh source $d/src/tag.zsh
source $d/src/func.zsh source $d/src/func.zsh
source $d/src/ue.zsh
source $d/src/ai/syui/game/character.zsh source $d/src/ai/syui/game/character.zsh
source $d/src/is/syu/main.zsh source $d/src/is/syu/main.zsh
@ -61,7 +62,13 @@ case $1 in
verify-icon verify-icon
;; ;;
self-col) self-col)
self-col self-col $2
;;
ue-system)
ue-system
;;
ue-user)
ue-user $2
;; ;;
*) *)
echo "${help[@]}" echo "${help[@]}"

10
scpt/generate_record.py Normal file
View File

@ -0,0 +1,10 @@
import json
record = {
"$type": "app.bsky.feed.post",
"text": "テスト投稿 from script",
"createdAt": "2025-05-26T12:00:00Z"
}
with open("record.json", "w", encoding="utf-8") as f:
json.dump(record, f, ensure_ascii=False, indent=2)

View File

@ -1,33 +1,3 @@
character=(
ai
manny
quinn
chinese
kirin
leviathan
phoenix
wyvern
cerberus
dragon
kitsune
pegasus
)
img=(
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreidlealfybajqzwv5eoz4jshnsijc2vnktlhpw4ph47krwj6aigqby
bafkreiegpqedlrfa4ljhssdnkrr5hyd5huy2xhh2zszj5wq2wuuzejggmq
bafkreig6vszkx3c4dcortjwfsz6sa6zwqgj7zpxj4lxfrrkwql4xhiu5ou
bafkreich7fsumke2yvumvixkruonzrcevk3f6g2cntzfwdn4n2c2vox5dm
bafkreiacjvagsekhiiljz3j237b6klrt6pkptxljt7kltprgg5276gv25q
bafkreihpni4lp55jysalcntulzal5rbhidtbseanlucpyucagzxmv6xj24
bafkreia3huw2gdenqatoobx3hcft74chced46bw4znfgepo5aenegobkri
bafkreidy74aieb6ie646xhosginox5zbnbnrtd76cnt4pbn73hrxgfnple
bafkreifnbfj27fr6nv7qeqqmwdibf7qrw4lauvzoknw5hexbifmwqt6kmq
)
function download_character_icon(){ function download_character_icon(){
t=( t=(
@ -219,8 +189,8 @@ delete_game_user() {
function create_game_user() { function create_game_user() {
col=ai.syui.game col=ai.syui.game
rkey=$1 rkey=$1
did=$did handle_yui=$handle
handle=$handle did_yui=$did
pds=`cat $f|jq -r ".didDoc.service.[].serviceEndpoint"|cut -d / -f 3` pds=`cat $f|jq -r ".didDoc.service.[].serviceEndpoint"|cut -d / -f 3`
if [ "$pds" != "syu.is" ];then if [ "$pds" != "syu.is" ];then
pds=bsky.social pds=bsky.social
@ -249,6 +219,8 @@ function create_game_user() {
if [ "$rkey" = "self" ];then if [ "$rkey" = "self" ];then
cname=manny cname=manny
unset did handle gender unset did handle gender
pds=bsky.social
plc=plc.directory
fi fi
imguri=https://cdn.bsky.app/img/feed_thumbnail/plain/$did_yui/${cid}@jpeg imguri=https://cdn.bsky.app/img/feed_thumbnail/plain/$did_yui/${cid}@jpeg
season=1 season=1
@ -286,8 +258,8 @@ function create_game_user() {
v1_json=" v1_json="
{ {
\"repo\": \"$handle\", \"repo\": \"$handle_yui\",
\"did\": \"$did\", \"did\": \"$did_yui\",
\"collection\": \"$col\", \"collection\": \"$col\",
\"rkey\": \"$rkey\", \"rkey\": \"$rkey\",
\"record\": { \"record\": {
@ -313,8 +285,8 @@ json_item="
json=" json="
{ {
\"repo\": \"$handle\", \"repo\": \"$handle_yui\",
\"did\": \"$did\", \"did\": \"$did_yui\",
\"collection\": \"$col\", \"collection\": \"$col\",
\"rkey\": \"$rkey\", \"rkey\": \"$rkey\",
\"record\": { \"record\": {
@ -345,7 +317,7 @@ if echo $json|jq . ;then
read y read y
if [ "y" = "$y" ];then if [ "y" = "$y" ];then
t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d $json $url` t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d $json $url`
#echo $t|jq . echo $t|jq .
#f=~/ai/ue/json/v${version}_${rkey}.json #f=~/ai/ue/json/v${version}_${rkey}.json
#if [ -f $f ];then #if [ -f $f ];then
# get_game_user $rkey >! $f # get_game_user $rkey >! $f

View File

@ -10,6 +10,10 @@ function at-env() {
did=$did_yui did=$did_yui
created=2025-04-21T00:00:00.323Z created=2025-04-21T00:00:00.323Z
docs_uri=https://docs.bsky.app/docs/api docs_uri=https://docs.bsky.app/docs/api
at_uri=at://$handle/ai.syui.game/ai
did=`echo $at_uri|cut -d / -f 3`
collection=`echo $at_uri|cut -d / -f 4`
rkey=`echo $at_uri|cut -d / -f 5`
d=${0:a:h} d=${0:a:h}
f=~/.config/ai/token.json f=~/.config/ai/token.json
if [ -f $f ];then if [ -f $f ];then
@ -23,10 +27,6 @@ function at-env() {
plc=plc.syu.is plc=plc.syu.is
pds=$host pds=$host
fi fi
at_uri=at://$handle/ai.syui.game/ai
did=`echo $at_uri|cut -d / -f 3`
collection=`echo $at_uri|cut -d / -f 4`
rkey=`echo $at_uri|cut -d / -f 5`
} }
function at-unset() { function at-unset() {

View File

@ -1,6 +1,11 @@
#!/bin/zsh #!/bin/zsh
function self-col(){ function self-col(){
if [ -n "$1" ];then
t=`curl -sL "$pds/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=$1"`
echo $t|jq .
exit
fi
col=( col=(
ai.syui.game ai.syui.game
ai.syui.system ai.syui.system

View File

@ -38,3 +38,33 @@ github=(
) )
tag=( at bsky bsync pds bgs plc ozone feed jetstream social-app oauth ) tag=( at bsky bsync pds bgs plc ozone feed jetstream social-app oauth )
#pds_list=(bsky.social syu.is boobee.blue socl.is ) #pds_list=(bsky.social syu.is boobee.blue socl.is )
character=(
ai
manny
quinn
chinese
kirin
leviathan
phoenix
wyvern
cerberus
dragon
kitsune
pegasus
)
character_img=(
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
bafkreidlealfybajqzwv5eoz4jshnsijc2vnktlhpw4ph47krwj6aigqby
bafkreiegpqedlrfa4ljhssdnkrr5hyd5huy2xhh2zszj5wq2wuuzejggmq
bafkreig6vszkx3c4dcortjwfsz6sa6zwqgj7zpxj4lxfrrkwql4xhiu5ou
bafkreich7fsumke2yvumvixkruonzrcevk3f6g2cntzfwdn4n2c2vox5dm
bafkreiacjvagsekhiiljz3j237b6klrt6pkptxljt7kltprgg5276gv25q
bafkreihpni4lp55jysalcntulzal5rbhidtbseanlucpyucagzxmv6xj24
bafkreia3huw2gdenqatoobx3hcft74chced46bw4znfgepo5aenegobkri
bafkreidy74aieb6ie646xhosginox5zbnbnrtd76cnt4pbn73hrxgfnple
bafkreifnbfj27fr6nv7qeqqmwdibf7qrw4lauvzoknw5hexbifmwqt6kmq
)

193
scpt/src/ue.zsh Executable file
View File

@ -0,0 +1,193 @@
case $OSTYPE in
darwin*)
day=`gdate --iso-8601=seconds`
;;
*)
day=`date --iso-8601=seconds`
;;
esac
function get_game_user() {
rkey=$did.$pds
pds=bsky.social
if [ "$1" = "syui" ] || [ "$1" = "ai" ];then
rkey=$1
fi
req=com.atproto.repo.getRecord
url="https://$pds/xrpc/$req?rkey=$rkey&repo=$did_yui&collection=ai.syui.game"
curl -sL $url|jq .
}
function delete_game_user() {
rkey=$2
if [ -z "$1" ];then
col=ai.syui.game
else
col=$1
fi
req=com.atproto.repo.DeleteRecord
url=https://$pds/xrpc/$req
repo=$did
#repo=did:plc:6qyecktefllvenje24fcxnie
json="{\"collection\":\"$col\", \"rkey\":\"$rkey\", \"repo\":\"$repo\"}"
echo $json
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d $json $url
}
function ue-user() {
col=ai.syui.game
rkey=$1
handle_yui=$handle
did_yui=$did
pds=`cat $f|jq -r ".didDoc.service.[].serviceEndpoint"|cut -d / -f 3`
if [ "$pds" != "syu.is" ];then
pds=bsky.social
fi
version=4
#rkey=syui
req=com.atproto.repo.putRecord
url=https://$pds/xrpc/$req
cname=dragon
if [ "$rkey" = "ai" ];then
cname=$rkey
gender=none
fi
if [ "$rkey" = "syui" ];then
cname=chinese
did=$did_syui
handle=syui.ai
gender=male
fi
if [ "$rkey" = "self" ];then
cname=manny
unset did handle gender
pds=bsky.social
plc=plc.directory
fi
season=1
group=test
lv=1
hp=1
exp=0
rare=0
mode=0
attack=0
attack_post=0
critical=0
critical_d=0
card=0
weapon=0
coin=0
count=0
case $cname in
ai)
group=origin
season=0
mode=2
;;
manny|quinn)
group=test
;;
*)
group=fantasy
;;
esac
json_item="
\"coin\": [{\"id\": 0, \"cp\": 0, \"rare\": 0, \"count\": 0}],
\"card\": [{\"id\": 0, \"cp\": 0, \"rare\": 0, \"count\": 0}],
\"weapon\": [{\"id\": 0, \"cp\": 0, \"rare\": 0, \"count\": 0}]
"
json="
{
\"repo\": \"$handle_yui\",
\"did\": \"$did_yui\",
\"collection\": \"$col\",
\"rkey\": \"$rkey\",
\"record\": {
\"version\": $version,
\"did\": \"$did\",
\"handle\": \"$handle\",
\"plc\": \"$plc\",
\"pds\": \"$pds\",
\"player\": {
\"limit\": false,
\"login\": false,
\"ten\": 0,
\"gender\": \"$gender\"
},
\"character\": {
$json
},
\"item\": {
$json_item
},
\"createdAt\": \"${created}\",
\"updatedAt\": \"${created}\"
}
}"
if echo $json|jq . ;then
echo y
read y
if [ "y" = "$y" ];then
t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d $json $url`
echo $t|jq .
#f=~/ai/ue/json/v${version}_${rkey}.json
#if [ -f $f ];then
# get_game_user $rkey >! $f
#fi
fi
fi
}
function ue-system() {
col=ai.syui.system
rkey=self
did=$did
handle=$handle
pds=`cat $f|jq -r ".didDoc.service.[].serviceEndpoint"|cut -d / -f 3`
if [ "$pds" != "syu.is" ];then
pds=bsky.social
fi
version=1
#rkey=syui
req=com.atproto.repo.putRecord
url=https://$pds/xrpc/$req
imgurl=https://git.syui.ai/ai/ai/raw/branch/main/img/item/card
json_card=" \"id\": $id, \"name\": \"$name\", \"img\": \"${imgurl}/${id}.webp\""
json_card=`curl -sL https://git.syui.ai/ai/ai/raw/branch/main/json/card.json|jq ".[]"`
json_weapon=`curl -sL https://git.syui.ai/ai/ai/raw/branch/main/json/weapon.json|jq ".[]"`
json_system=`curl -sL https://git.syui.ai/ai/ai/raw/branch/main/json/system.json|jq ".[]"`
json_character=`curl -sL https://git.syui.ai/ai/ai/raw/branch/main/json/character.json|jq ".[]"`
json_ability=`curl -sL https://git.syui.ai/ai/ai/raw/branch/main/json/ability.json|jq ".[]"`
json="
{
\"repo\": \"$handle\",
\"did\": \"$did\",
\"collection\": \"$col\",
\"rkey\": \"$rkey\",
\"record\": {
\"card\": ${json_card},
\"weapon\": ${json_weapon},
\"system\": ${json_system},
\"character\": ${json_character},
\"ability\": ${json_ability},
\"createdAt\": \"${created}\",
\"updatedAt\": \"${created}\"
}
}"
if echo $json|jq . ;then
echo y
read y
if [ "y" = "$y" ];then
t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d $json $url`
echo $t|jq .
fi
fi
}