1
0
This commit is contained in:
syui 2024-02-13 18:45:28 +09:00
parent 1b3dfbd657
commit 8d3a7e6af6
Signed by: syui
GPG Key ID: 5417CFEBAD92DF56
57 changed files with 7057 additions and 27 deletions

View File

@ -71,24 +71,7 @@ $ ./ai.zsh t
### docker
`@<handle> /did`
```sh
$ docker run -it syui/aios ai
$ docker run -it -d syui/aios zsh -c "ai login <handle> -p <password> && ai bot"
---
$ docker ps
1234567 syui/aios
$ docker stop 1234567
```
`Dockerfile`
```sh
$ cp -rf ~/.config/ai ./config/
$ docker build -t syui/aios .
$ docker run -it syui/aios ai bot
---
$ docker stop `docker ps -a -q`
```

2
ai.zsh
View File

@ -7,7 +7,7 @@ case $OSTYPE in
alias date="/opt/homebrew/bin/gdate"
;;
esac
d=${0:a:h}/scpt
d=${0:a:h}/test
source $d/env
source $d/refresh.zsh
source $d/token.zsh

1
docs/wiki.md Normal file
View File

@ -0,0 +1 @@
##

1623
scpt/api_card.zsh Executable file

File diff suppressed because it is too large Load Diff

46
scpt/api_card_raid_win.zsh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/zsh
url=https://api.syui.ai
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
f_reid_user=$HOME/.config/atr/txt/card_reid_user.txt
n=`cat $f_reid_user|wc -l`
for ((i=1;i<=$n;i++))
do
uid=`cat $f_reid_user|awk "NR==$i"`
r=`echo $(($RANDOM % 10))`
if [ $r -eq 1 ];then
card=`echo $(($RANDOM % 15))`
cp=`echo $(($RANDOM % 300 + 50))`
else
card=0
cp=`echo $(($RANDOM % 100 + 1))`
fi
ss=$(($RANDOM % 10))
if [ 13 -ne $card ] && [ $ss -eq 1 ];then
card=13
fi
s=$(($RANDOM % 2))
if [ $s -eq 1 ];then
s=super
plus=$(($RANDOM % 500 + 200))
cp=$((cp + plus))
else
s=normal
fi
if [ $card -eq 13 ];then
plus=$(($RANDOM % 1000 + 300))
cp=$((cp + plus))
fi
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\"}" -s $url/cards`
echo $tmp
card=`echo $tmp|jq -r .card`
cp=`echo $tmp|jq -r .cp`
echo "[card]"
echo "id : ${card}"
echo "cp : ${cp}"
done

215
scpt/api_chara.zsh Executable file
View File

@ -0,0 +1,215 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ] || [ -z "$5" ];then
echo no option
echo "/chara start"
exit
fi
chara_qa="あなたはサッカーをしています。
試合中、ふと目にするのは?
1 : 開けた青空
2 : 真っ白な柱
3 : 風になびく芝生
数字を入れて答えてね。
/chara 数字"
chara_qb="ここは研究室。
実験のため道具を手に持っています。
1 : 淡い液体が入ったガラス瓶
2 : 清潔なシーツ
3 : 観葉植物"
chara_qc="宇宙に打ち上げられたロケットから地球を見ます。
何が見えましたか?
1 : 別の宇宙船
2 : 飛行機
3 : 大きな島"
chara_ba="
☑ 平和を願う
☑ 協調性は高いが自己主張は弱い
☑ 相談がうまい
---"
chara_bb="
☑ 変化自在
☑ 世間離れしており常識知らず
☑ 真面目で芯が強い
---"
chara_bc="
☑ 思慮深い
☑ 一人の時間が好きで冷たく見える
☑ 周りを観察している
---"
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":0,\"ten_su\":$first_ten,\"ten\": true,\"token\":\"$token\"}" -s $host/users/$uid`
data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
host_card=https://card.syui.ai/json/card.json
#host_card_json=`curl -sL $host_card`
ran=$(($RANDOM % 3))
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
handle=$1
did=$2
username=`echo $1|cut -d . -f 1`
cid=$3
uri=$4
option=$5
yui_did=did:plc:4hqjfn7m6n5hno3doamuhgef
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
aiten=`echo $data|jq -r .aiten`
ten_post=`echo $data|jq -r .ten_post`
ten_su=`echo $data|jq -r .ten_su`
ten_kai=`echo $data|jq -r .ten_kai`
ten_delete=`echo $data|jq -r .ten_delete`
ten_bool=`echo $data|jq -r .ten`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
ten_at_n=`date --iso-8601=seconds`
d=`date +"%Y-%m-%d"`
ten_at=`echo $data|jq -r .ten_at`
ten_at=`date -d "$ten_at" +"%Y-%m-%d"`
data_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
# uri_post=`echo '{"uri":"at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3k3zr5b336o2u","cid":"bafyreierpw23cxvx4e3cjzd3h6r4crz646zb2ana6cmmsxn4z5rpupl35e"}'|jq -r .uri|cut -d / -f 5`
# https://bsky.app/profile/$did/post/$uri_post
tmp_atr='{"uri":"at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3k3zr5b336o2u","cid":"bafyreierpw23cxvx4e3cjzd3h6r4crz646zb2ana6cmmsxn4z5rpupl35e"}'
function chara_check(){
#card_check=`echo $data_card|jq -r ".[]|select(.card == 48 or .card == 49 or .card == 50 or .card == 51 or .card == 52 or .card == 53)"`
#card_check=`echo $data_card|jq -r ".[]|select(.card == 54 or .card == 55 or .card == 56)"`
card_check=`echo $data_card|jq -r ".[]|select(.card == 58 or .card == 53 or .card == 59)"`
if [ -n "$card_check" ];then
echo you already have chara-card
exit
fi
}
function chara_start() {
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_su\":0, \"ten_kai\":1, \"token\":\"$token\"}" -s $host/users/$uid`
echo "$chara_qa"
exit
}
function chara_post(){
case $1 in
ponta)
card=53
text=$chara_ba
title="[ポンタ]"
desc="緑色"
;;
octo)
card=58
text=$chara_bb
title="[オクトカット]"
desc="白色"
;;
zeusu)
card=59
text=$chara_bc
title="[ゼウス]"
desc="青色"
;;
esac
host_card=https://card.syui.ai/json/card.json
host_card_json=`curl -sL $host_card`
j=`echo $host_card_json|jq ".[]|select(.id == $card)"`
img=`echo $j|jq -r .img`
cp=$(($RANDOM % 1230))
s=super
skill=chara
link="https://card.syui.ai/$username"
card_check=`echo $data_card|jq -r ".[]|select(.card == $card)"`
if [ -z "$card_check" ];then
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
card=`echo $tmp|jq -r .card`
cp=`echo $tmp|jq -r .cp`
fi
tmp_atr=`$atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link`
uri_post=`echo $tmp_atr|jq -r .uri|cut -d / -f 5`
post_url="https://bsky.app/profile/$yui_did/post/$uri_post"
ccid=`echo $tmp|jq -r .id`
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"url\":\"$post_url\",\"token\":\"$token\"}" $host/cards/$ccid`
exit
}
function chara_plus() {
case $ten_kai in
2)
chara_q=$chara_qb
;;
3)
chara_q=$chara_qc
;;
#4)
# chara_q=$chara_qd
# ;;
esac
echo "$chara_q"
case $1 in
1|2|3)
tmp_su=$1
ten_su=$((ten_su + $tmp_su))
;;
esac
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_su\":$ten_su, \"ten_kai\":$ten_kai, \"token\":\"$token\"}" -s $host/users/$uid`
case $ten_kai in
4)
if [ $ten_su -eq 9 ] || [ $ten_su -eq 8 ] || [ $ten_su -eq 7 ];then
chara=ponta
elif [ $ten_su -eq 6 ];then
chara=octo
else
chara=zeusu
fi
chara_post $chara
;;
esac
}
chara_check
case "$option" in
start)
chara_start
;;
1|2|3)
ten_kai=$((ten_kai + 1))
chara_plus $option
;;
*)
echo "/chara start"
echo "/chara 1,2,3"
;;
esac
exit

156
scpt/api_egg.zsh Executable file
View File

@ -0,0 +1,156 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
egg_card=40
handle=$1
did=$2
username=`echo $1|cut -d . -f 1`
opt=$3
if [ -z "$opt" ];then
echo no option
exit
fi
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
aiten=`echo $data|jq -r .aiten`
fav=`echo $data|jq -r .fav`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
ten_at_n=`date --iso-8601=seconds`
d=`date +"%Y%m%d"`
limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
opt_dec=`echo $opt|base64 -d`
if [ "$did" = "$opt_dec" ];then
echo verify
else
echo no verify
exit
fi
fav_card=`echo $data_user_card|jq -r ".[]|select(.card == $egg_card)"`
cid=`echo $fav_card|jq -r .id`
egg_at=`echo $data|jq -r .egg_at`
egg_at=`date -d "$egg_at" +"%Y%m%d"`
egg_at_n=`date --iso-8601=seconds`
day_m=`date +"%H%M"`
day_mm=`date +"%H%M" -d "-1 min"`
day_mmm=`date +"%H%M" -d "-2 min"`
if [ -z "$fav_card" ];then
echo "no egg"
if [ "$egg_at" = "$d" ];then
echo "limit egg"
exit
fi
card=39
data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)|.cp"|head -n 1`
if [ -n "$card_check" ];then
cp=$card_check
cid=`echo $data_uu|jq -r ".[]|select(.card == $card)|.id"|head -n 1`
echo "you already have, dragon"
ran=`echo $(($RANDOM % 3))`
ran_a=`echo $(($RANDOM % 5 + 1))`
if [ $ran -eq 1 ];then
card_check=$((card_check * 3))
echo "🐉 ---> $cp +${ran_a}"
cp=$((cp + ran_a))
else
cp=$((cp + 1))
echo "$cp +1"
fi
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$cid`
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\", \"token\":\"$token\"}" -s $host/users/$uid`
exit
fi
card=42
cp=0
data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)|.cp"|head -n 1`
if [ -n "$card_check" ];then
echo "you already have, nyan"
ran=`echo $(($RANDOM % 1000 + 1000))`
aiten_p=$((aiten + ran))
echo "🐈 ---> [aiten]${aiten} +${ran}"
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\", \"aiten\":$aiten_p, \"token\":\"$token\"}" -s $host/users/$uid`
exit
fi
exit
fi
card_id=`echo $fav_card|jq -r ".id"`
card_cp=`echo $fav_card|jq -r ".cp"`
card_name=`echo $fav_card|jq -r ".card"`
card_status=`echo $fav_card|jq -r ".status"`
card_skill=`echo $fav_card|jq -r ".skill"`
function fav_status() {
echo "\n[card] ${card_name}"
echo "---"
echo "cp : ${card_cp}"
echo "cid : ${cid}"
echo "skill : ${card_skill}"
echo "status : ${card_status}"
}
function fav_battle() {
cp_b=`echo $(($RANDOM % 14))`
if [ "$egg_at" = "$d" ];then
echo "limit egg"
exit
fi
cp_i=`echo $fav_card|jq -r ".cp"`
card_name=`echo $fav_card|jq -r ".card"`
card_status=`echo $fav_card|jq -r ".status"`
card_skill=`echo $fav_card|jq -r ".skill"`
if [ $cp_i -ge $cp_b ];then
card=39
skill=dragon
cp=`echo $(($RANDOM % 1000 + 1200))`
s=third
ran=`echo $(($RANDOM % 10))`
if [ $ran -eq 1 ];then
card=42
skill=nyan
cp=0
fi
body="...congratulations! your egg has evolved\negg ---> ${skill} !!"
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"card\": $card,\"cp\":$cp,\"token\":\"$token\", \"status\": \"$s\",\"skill\": \"$skill\"}" $host/cards/$cid`
else
body="...no evolved"
fi
echo "\n${cp_i} vs $cp_b"
echo "----"
echo "${body}"
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\",\"token\":\"$token\"}" -s $host/users/$uid`
exit
}
fav_battle
exit

161
scpt/api_fav.zsh Executable file
View File

@ -0,0 +1,161 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
handle=$1
did=$2
username=`echo $1|cut -d . -f 1`
opt=$3
if [ -z "$opt" ];then
echo no option
echo "---"
echo "CID = 1234567"
echo "@yui.syui.ai /fav 1234567"
echo "---"
echo "/fav status"
echo "/fav battle"
exit
fi
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
if [ $opt -eq 0 ];then
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"fav\": $opt,\"token\":\"$token\"}" -s $host/users/$uid`
echo ok
exit
fi
aiten=`echo $data|jq -r .aiten`
fav=`echo $data|jq -r .fav`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
ten_at_n=`date --iso-8601=seconds`
d=`date +"%Y%m%d"`
limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
case "$opt" in
[bB]|-[bB]|[bB]attle|[sS]|-[sS]|[sS]tatus)
cid=`echo $data|jq -r .fav`
fav_card=`echo $data_user_card|jq -r ".[]|select(.id == $cid)"`
;;
*)
opt=$((opt + 0))
cid=$opt
fav_card=`echo $data_user_card|jq -r ".[]|select(.id == $cid)"`
;;
esac
updated_at=`echo $data|jq -r .updated_at`
updated_at_m=`date -d "$updated_at" +"%H%M"`
updated_at_n=`date --iso-8601=seconds`
updated_at=`date -d "$updated_at" +"%Y%m%d"`
raid_at=`echo $data|jq -r .raid_at`
raid_at=`date -d "$raid_at" +"%Y%m%d"`
raid_at_n=`date --iso-8601=seconds`
day_m=`date +"%H%M"`
day_mm=`date +"%H%M" -d "-1 min"`
day_mmm=`date +"%H%M" -d "-2 min"`
if [ -z "$fav_card" ];then
echo "no card id"
exit
fi
card_id=`echo $fav_card|jq -r ".id"`
card_cp=`echo $fav_card|jq -r ".cp"`
card_name=`echo $fav_card|jq -r ".card"`
card_status=`echo $fav_card|jq -r ".status"`
card_skill=`echo $fav_card|jq -r ".skill"`
function fav_status() {
echo "\n[card] ${card_name}"
echo "---"
echo "cp : ${card_cp}"
echo "cid : ${cid}"
echo "skill : ${card_skill}"
echo "status : ${card_status}"
}
function fav_battle() {
if [ -n "$1" ];then
cp_b=$1
else
cp_b=$(($RANDOM % 1400))
fi
if [ $updated_at -ge $d ] || [ "$updated_at" = "$d" ];then
echo "limit battle"
exit
fi
cp_i=`echo $fav_card|jq -r ".cp"`
card_name=`echo $fav_card|jq -r ".card"`
card_status=`echo $fav_card|jq -r ".status"`
card_skill=`echo $fav_card|jq -r ".skill"`
if [ $cp_i -gt $cp_b ];then
if [ $cp_i -ge 9000 ];then
cp_plus=$(($RANDOM % 27 + 1))
elif [ $cp_i -ge 7000 ];then
cp_plus=$(($RANDOM % 47 + 1))
else
cp_plus=$(($RANDOM % 237 + 1))
fi
else
cp_plus=$(($RANDOM % 17 + 1))
fi
echo "\n✧${cp_i} vs $cp_b"
echo "----"
cp=$((cp_i + cp_plus))
body="level up!"
echo "${body}${cp}(+${cp_plus})"
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$cid`
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"updated_at\":\"$updated_at_n\",\"token\":\"$token\"}" -s $host/users/$uid`
exit
}
function fav_add() {
card_status=fifth
u_data=`curl -sL "https://api.syui.ai/users/$uid/card?itemsPerPage=2555"|jq -r ".[]|select(.status == \"$card_status\")"`
if [ -z "$u_data" ];then
d_data=`curl -sL $host/cards/$cid|jq -r "select(.status == \"first\" or .status == \"second\" or .status == \"third\" or .status == \"yui\" or .status == \"fourth\" or .status == \"$card_status\")"`
if [ -z "$d_data" ];then
echo status $card_status
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"status\":\"$card_status\",\"token\":\"$token\"}" $host/cards/$cid`
fi
fi
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"fav\": $opt,\"token\":\"$token\"}" -s $host/users/$uid`
if [ -n "$tmp" ];then
echo ok
fi
exit
}
case "$opt" in
[bB]|-[bB]|[bB]attle)
fav_battle $4
;;
[sS]|-[sS]|[sS]tatus)
fav_status
;;
*)
fav_add
;;
esac
exit

278
scpt/api_gift.zsh Executable file
View File

@ -0,0 +1,278 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
handle=$1
did=$2
username=`echo $1|cut -d . -f 1`
cid=`echo $3|cut -d ' ' -f 1`
guser=$4
if [ "$3" = "ai" ];then
guser=ai
fi
if [ -z "$cid" ];then
echo no option
echo "---"
echo "@yui.syui.ai /gift ai"
echo "---"
echo "@yui.syui.ai /gift status"
echo "12345"
echo "67891"
echo "---"
echo "@yui.syui.ai /gift 12345"
echo ""
echo "---"
echo "@yui.syui.ai /gift 12345 syui"
exit
fi
function card_env(){
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
if [ -z "$data" ];then
exit
fi
uid=`echo $data|jq -r .id`
gid=`echo $gdata|jq -r .id`
aiten=`echo $data|jq -r .aiten`
fav=`echo $data|jq -r .fav`
cdata=`curl -sL $host/cards/$cid`
if [ -z "$cdata" ];then
echo no card
exit
fi
card=`echo $cdata|jq -r .card`
cp=`echo $cdata|jq -r .cp`
count=`echo $cdata|jq -r .count`
author=`echo $cdata|jq -r .author`
skill=`echo $cdata|jq -r .skill`
s=`echo $cdata|jq -r .status`
if [ $count -eq 0 ];then
echo card count 0
exit
fi
if [ $author != "$username" ];then
echo no author
echo "$author --> $username"
exit
fi
}
function card_env_ai(){
guser=ai
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
if [ -z "$data" ];then
exit
fi
uid=`echo $data|jq -r .id`
gid=`echo $gdata|jq -r .id`
aiten=`echo $data|jq -r .aiten`
fav=`echo $data|jq -r .fav`
cdata=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[0]"`
if [ -z "$cdata" ];then
cdata=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[]|select(.author == \"$username\")"|jq -s ".[0]"`
fi
if [ -z "$cdata" ];then
echo no card
exit
fi
cid=`echo $cdata|jq -r .id`
card=`echo $cdata|jq -r .card`
cp=`echo $cdata|jq -r .cp`
count=`echo $cdata|jq -r .count`
author=`echo $cdata|jq -r .author`
skill=`echo $cdata|jq -r .skill`
s=`echo $cdata|jq -r .status`
if [ $count -eq 0 ];then
echo card count 0
exit
fi
if [ $author != "$username" ];then
echo no author
echo "$author --> $username"
exit
fi
aicard=`curl -sL "$host/users/$gid/card?itemsPerPage=3000"|jq -r ".[]|select(.card >= 1)"|jq -s`
if [ -z "$aicard" ];then
exit
fi
n=`echo $aicard|jq length`
n=$((n - 1))
ran=$((RANDOM % n))
ai_id=`echo $aicard|jq -r ".[$ran]|.id"`
ai_card=`echo $aicard|jq -r ".[$ran]|.card"`
ai_cp=`echo $aicard|jq -r ".[$ran]|.cp"`
ai_skill=`echo $aicard|jq -r ".[$ran]|.skill"`
ai_s=`echo $aicard|jq -r ".[$ran]|.status"`
ai_author=ai
}
function card_env_ai_select(){
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
if [ -z "$data" ];then
exit
fi
uid=`echo $data|jq -r .id`
gid=`echo $gdata|jq -r .id`
aiten=`echo $data|jq -r .aiten`
fav=`echo $data|jq -r .fav`
cdata=`curl -sL $host/cards/$cid`
if [ -z "$cdata" ];then
echo no card
exit
fi
cid=`echo $cdata|jq -r .id`
card=`echo $cdata|jq -r .card`
cp=`echo $cdata|jq -r .cp`
count=`echo $cdata|jq -r .count`
author=`echo $cdata|jq -r .author`
skill=`echo $cdata|jq -r .skill`
s=`echo $cdata|jq -r .status`
if [ $count -eq 0 ];then
echo card count 0
exit
fi
if [ $author != "$username" ];then
echo no author
echo "$author --> $username"
exit
fi
aicard=`curl -sL "$host/users/$gid/card?itemsPerPage=3000"|jq -r ".[]|select(.card >= 1)"|jq -s`
if [ -z "$aicard" ];then
exit
fi
n=`echo $aicard|jq length`
n=$((n - 1))
ran=$((RANDOM % n))
ai_id=`echo $aicard|jq -r ".[$ran]|.id"`
ai_card=`echo $aicard|jq -r ".[$ran]|.card"`
ai_cp=`echo $aicard|jq -r ".[$ran]|.cp"`
ai_skill=`echo $aicard|jq -r ".[$ran]|.skill"`
ai_s=`echo $aicard|jq -r ".[$ran]|.status"`
ai_author=ai
}
function card_gift() {
card_env
if [ -z "$guser" ];then
echo card:$card
echo skill:$skill
echo status:$s
echo count:$count
echo author:$author
exit
fi
count=$((count - 1))
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
echo ok
echo "$author($cid) --> $guser"
}
function card_ai() {
card_env_ai
count=$((count - 1))
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
echo ok
echo "$author($cid) --> $guser"
echo "---"
echo 'thx!'
echo card:$ai_card
echo cp:$ai_cp
echo author:$ai_author
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$ai_card,\"status\":\"$ai_s\",\"cp\":$ai_cp,\"password\":\"$pass\",\"skill\":\"$ai_skill\",\"author\":\"$ai_author\",\"count\":0}" -sL $host/cards`
}
function card_ai_select() {
card_env_ai_select
count=$((count - 1))
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
echo ok
echo "$author($cid) --> $guser"
echo "---"
echo 'thx!'
echo card:$ai_card
echo cp:$ai_cp
echo author:$ai_author
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$ai_card,\"status\":\"$ai_s\",\"cp\":$ai_cp,\"password\":\"$pass\",\"skill\":\"$ai_skill\",\"author\":\"$ai_author\",\"count\":0}" -sL $host/cards`
}
function card_status(){
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
acard=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[]|select(.author == \"$username\")|.id"`
if [ -z "$acard" ];then
echo no card
exit
fi
echo $acard
}
function test_cmd(){
echo "test ok /gift $1"
echo cid:$cid
echo guser:$guser
exit
}
case $cid in
"status")
card_status
;;
"ai")
#test_cmd ai
card_ai
;;
*)
if [ "ai" = "$guser" ];then
#test_cmd ai_select
card_ai_select
else
#test_cmd gift user
card_gift
fi
;;
esac
exit

1345
scpt/api_ten.zsh Executable file

File diff suppressed because it is too large Load Diff

183
scpt/api_ten_auto.zsh Executable file
View File

@ -0,0 +1,183 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
card_pay=$HOME/.config/atr/scpt/card_pay.zsh
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
host_card=https://card.syui.ai/json/card.json
host_card_json=`curl -sL $host_card`
n_cid=$HOME/.config/atr/txt/tmp_notify_cid.txt
f_cfg=$HOME/.config/atr/txt/tmp_ten_config.txt
handle=$1
did=$2
username=`echo $1|cut -d . -f 1`
cid=$3
uri=$4
if [ ! -f $f_cfg ];then
echo $host_card_json |jq -r ".[]|select(.ten != null)|.ten" |tr -d '\n' >! $f_cfg
fi
if [ -f $f_cfg ];then
nn=`cat $f_cfg|wc -c`
fi
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
function ten_yak() {
unset ran_a
unset ran_b
unset ran_c
unset ten_new
unset ten_yaku
ran_a=$(($RANDOM % nn))
ran_b=$(($RANDOM % nn))
ran_c=$(($RANDOM % nn))
ten_new=0
char_a=`cat $f_cfg| cut -c $ran_a`
char_b=`cat $f_cfg| cut -c $ran_b`
char_c=`cat $f_cfg| cut -c $ran_c`
ten_char=`echo "${char_a}\n${char_b}\n${char_c}"|head -n 3|sort|tr -d '\n'`
if [ ${#ten_char} -eq 0 ];then
ten_char=AAA
fi
if [ ${#ten_char} -eq 1 ];then
ten_char=AA${ten_char}
fi
if [ ${#ten_char} -eq 2 ];then
ten_char=A${ten_char}
fi
char_a=`echo $ten_char|cut -b 1`
char_b=`echo $ten_char|cut -b 2`
char_c=`echo $ten_char|cut -b 3`
case $ten_char in
EMY)
card=1
;;
KOS)
card=2
;;
CHI)
card=3
;;
AIT)
card=4
;;
OYZ)
card=5
;;
IKY)
card=6
;;
AKM)
card=7
;;
KUY)
card=8
;;
AW*)
card=9
;;
AHK)
card=10
;;
IKT)
card=11
;;
AAM)
card=12
;;
OSZ)
card=13
;;
CHO)
card=14
;;
*)
card=0
;;
esac
ten_new=${card}00
if [ $ten_new -eq 0 ];then
ten_new=0
else
ten_yaku="[$ten_char]"
fi
if [ "$ten_char" = "AAA" ];then
ten_new=100
fi
if [ "$char_a" = "A" ] && [ "$char_b" = "I" ] && [ $ten_new -ne 0 ];then
ten_new=150
fi
if [ "$char_a" = "$char_b" ] && [ $ten_new -ne 0 ];then
ten_new=50
fi
echo "[$i] $ten_su $ten_yaku+$ten_new"
ten_su=$((ten_su + ten_new))
}
function user_env() {
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
ten_data=`echo $all_data|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
aiten=`echo $data|jq -r .aiten`
ten_post=`echo $data|jq -r .ten_post`
ten_bool=`echo $data|jq -r .ten`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
ten_at_n=`date --iso-8601=seconds`
limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
d=`date +"%Y-%m-%d"`
ten_at=`echo $data|jq -r .ten_at`
ten_at=`date -d "$ten_at" +"%Y-%m-%d"`
ten_kai=`echo $data|jq -r .ten_kai`
if [ "$d" = "$ten_at" ];then
echo "limit aiten"
exit
fi
ten_kai=`echo $data|jq -r .ten_kai`
}
function ten_shutdown(){
ten_kai=0
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
ten=`echo $((ten_su + 200))`
ten_su=$ten
aiten=`echo $((aiten + ten_su))`
echo "+100"
echo "---"
echo user : $handle
echo ten : $ten
echo aiten :
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_kai\":$ten_kai, \"ten_su\":$ten_su, \"ten\": false, \"token\":\"$token\", \"ten_at\" : \"$ten_at_n\", \"aiten\": $aiten}" -s $host/users/$uid`
}
user_env
for ((i=1;i<=7;i++))
do
ten_yak
done
ten_shutdown
exit

31
scpt/api_ten_su_reset.zsh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/zsh
host=https://api.syui.ai
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
function ten_su_reset() {
ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
ten_u_tmp=`echo $ten_data|jq -s`
ten_n_tmp=`echo $ten_u_tmp|jq "length"`
ten_n_tmp=$((ten_n_tmp - 1))
#ten_n_tmp=5
for ((i=0;i<$ten_n_tmp;i++))
do
u_i=`echo $ten_u_tmp|jq -r ".[$i].id"`
u_a=`echo $ten_u_tmp|jq -r ".[$i].username"`
u_s=`echo $ten_u_tmp|jq -r ".[$i].ten_su"`
echo "---"
echo "id : $u_i"
echo "user : $u_a"
echo "ten : $u_s"
curl -X PATCH -H "Content-Type: application/json" -d "{\"ten\": false,\"token\":\"$token\", \"ten_su\": 0}" -s $host/users/$u_i
done
}
ten_su_reset

79
scpt/arch.zsh Executable file
View File

@ -0,0 +1,79 @@
#!/bin/zsh
home=/home/syui
name=arch
a=$home/$name
function arch_in(){
mkdir -p $a
sudo pacstrap -c $a base
#sudo echo pts/0 >> $a/etc/securetty
#sudo echo pts/1 >> $a/etc/securetty
sudo rm -rf /var/lib/machines/$name
sudo rm -rf /var/lib/machines/${name}back
sudo mv $a /var/lib/machines/
sudo machinectl clone arch archback
}
function arch_rm(){
sudo machinectl remove $name
}
function arch_up(){
sudo machinectl poweroff $name > /dev/null 2>&1
sleep 5
sudo machinectl terminate $name > /dev/null 2>&1
sleep 5
sudo machinectl start ${name}back
sleep 5
ssh ${name}back pacman -Syu --noconfirm
sleep 5
sudo machinectl poweroff ${name}back
}
function arch_st(){
sudo machinectl start $name
}
function arch_of(){
sudo machinectl poweroff $name
}
function arch_ex(){
sudo machinectl shell $name
$1
poweroff
}
function arch_re(){
sudo machinectl poweroff $name > /dev/null 2>&1
sleep 5
sudo machinectl terminate $name > /dev/null 2>&1
sleep 5
sudo machinectl remove $name
sleep 5
sudo machinectl clone ${name}back $name
sleep 5
sudo machinectl start $name
}
case "$1" in
"update"|"-u")
arch_up
arch_re
echo "machinectl update done"
;;
"reset"|"-r")
arch_re
echo "machinectl reset done"
;;
*)
sudo machinectl start $name
t=`ssh $name "$*"`
if [ -z "$t" ];then
ssh -tt $name "$*"
else
echo "$t"
fi
;;
esac

21
scpt/at_img.zsh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/zsh
dir=${0:a:h}
f=$HOME/.config/atr/scpt/png/t.png
f_sleep=$HOME/.config/atr/scpt/png/sleep
cid=$1
uri=$2
if [ ! -f $f ];then
atr r "limit 1 day" -c $cid -u $uri
exit
fi
if [ -f $f_sleep ];then
link=bafkreidgp2cl4cvkn3i4gzqj6kfiwngjjh5ie2jwobh632jh4ejlbiwdhm
atr img-post "#nyancat" -l $link -c $cid -u $uri
rm $f_sleep
exit
fi
link=`atr img-upload $f|jq -r .blob.ref.'"$link"'`
atr img-post "#stablediffusion" -l $link -c $cid -u $uri

21
scpt/at_search.zsh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/zsh
d=${0:a:h:h}
url="search.bsky.social/search/posts?q="
q=`echo $*|tr ' ' '+'`
url="${url}${q}"
t=`curl -sL "$url"`
echo $t
n=`echo $t|jq "length"`
n=`expr $n - 1`
for ((i=0;i<=$n;i++))
do
did=`echo $t|jq -r ".[$i].user.did"`
text=`echo $t|jq -r ".[$i].post.text"`
tid=`echo $t|jq -r ".[$i].tid"`
if [ "$text" != "null" ];then
echo $did
echo $text
echo https://$tid
fi
done

24
scpt/bluesky.zsh Executable file
View File

@ -0,0 +1,24 @@
#!/bin/zsh
d=${0:a:h}
dd=${0:a:h:h}/json
#https://github.com/bluesky-social/atproto/issues/597
host=bsky.social
base=https://$host/xrpc
handle=`cat ~/.config/atr/token.json| jq -r .handle`
token=`cat ~/.config/atr/token.json| jq -r .accessJwt`
if [ -n "$1" ];then
url=$base/$1
else
url="$base/app.bsky.actor.getProfile?actor=$handle"
fi
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/profile.json
cat $dd/profile.json
url=$base/app.bsky.feed.getTimeline
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/timeline.json
cat $dd/timeline.json
url=$base/app.bsky.notification.listNotifications
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/notify.json
cat $dd/notify.json|jq .

39
scpt/bot_card.zsh Executable file
View File

@ -0,0 +1,39 @@
#!/bin/zsh
host_at=bsky.social
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
scpt=$HOME/.config/atr/scpt/api_card.zsh
handle=skychan.social
did=did:plc:7hgow77uky7lgbinwyvbzhar
f=$HOME/.config/atr/card_bot.txt
touch $f
n=5
for ((i=0;i<=$n;i++))
do
echo $i
cid=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.cid"`
uri=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.uri"`
t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.value.text"`
echo $t $cid $uri
if [ "@yui.syui.ai /card" = "$t" ];then
if [ "$cid" = "`cat $f`" ];then
exit
fi
card=`$scpt $handle $did`
link="https://card.syui.ai/skychan"
~/.cargo/bin/atr r "$card" -c $cid -u "$uri" -l "$link"
echo $cid >! $f
fi
if [ "@yui.syui.ai /card -b" = "$t" ];then
if [ "$cid" = "`cat $f`" ];then
exit
fi
card=`$scpt $handle $did -b`
link="https://card.syui.ai/skychan"
~/.cargo/bin/atr r "\n$card" -c $cid -u "$uri" -l "$link"
echo $cid >! $f
fi
done
exit

60
scpt/bot_kawaii.zsh Executable file
View File

@ -0,0 +1,60 @@
#!/bin/zsh
d=$HOME/.config/atr/txt
mkdir -p $d
f=$d/kawaii.txt
function test_post() {
host_at=bsky.social
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
handle=lilly-niyu.bsky.social
n=10
for ((i=0;i<=$n;i++))
do
echo $i
cid=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.cid"`
uri=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.uri"`
t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.value.text"`
echo $t $cid $uri
if [ "かわいいにゃ〜!!" = "$t" ];then
#atr r "楽しそう!アイもまぜてよ" -c $cid -u "$uri"
fi
done
}
#uri=at://$did/$tid
#{
# "tid": "app.bsky.feed.post/3judrtmxuin2b",
# "cid": "bafyreibebbn7og5dgvvegcjlh357pnrpuvvinbjeaqbfvqb4jsrpbsw3di",
# "user": {
# "did": "did:plc:hodycxjeqfxtest2ilj47j7g",
# "handle": "lilly-niyu.bsky.social"
# },
# "post": {
# "createdAt": 1682587582509000000,
# "text": "かわいいにゃ〜!!",
# "user": "lilly-niyu.bsky.social"
# }
#}
url="search.bsky.social/search/posts?q=かわいいにゃ〜!!"
q=`echo $*|tr ' ' '+'`
url="${url}${q}"
t=`curl -sL "$url"`
cid=`echo $t|jq -r ".[1].cid"`
did=`echo $t|jq -r ".[1].did"`
tid=`echo $t|jq -r ".[1].tid"`
uri="at://$did/$tid"
text=`echo $t|jq -r ".[1].post.text"`
touch $f
echo $text
if [ "かわいいにゃ〜!!" = "$text" ] && [ "`cat $f`" != "$cid" ];then
echo ok
atr r "楽しそう!アイもまぜてよ" -c $cid -u "$uri"
echo $cid >! $f
else
echo no
fi

79
scpt/bot_list.zsh Executable file
View File

@ -0,0 +1,79 @@
#!/bin/zsh
url_plc="https://plc.directory/export"
host_at=bsky.social
url=https://plc.directory
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
dir=$HOME/.config/atr/txt
file=$dir/bot_list.txt
unset timed
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
if [ -z "$1" ];then
exit
fi
if ! echo $1|grep "." >/dev/null 2>&1;then
echo "ex : user syui.bsky.social"
exit
fi
if [ ! -d $dir ];then
mkdir -p $dir
fi
if [ ! -f $file ];then
touch $file
fi
function mfile() {
t=`cat $file|sort|uniq`
if [ -n "$t" ];then
echo "$t" >! ${file}.back
mv ${file}.back $file
fi
}
function plc(){
if cat $file|grep "$1" >/dev/null 2>&1;then
cat $file|grep "$1"
exit
fi
json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
if [ -z "$json" ];then
check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
if [ "null" != "$check" ];then
json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
fi
fi
if [ -n "$json" ];then
created_at=`echo $json|jq -r .createdAt |tail -n 1`
fi
if [ -n "$created_at" ];then
echo "$created_at : $1"
echo "$created_at : $1" >> $file
mfile
exit
fi
}
if [ "$1" = "-l" ];then
mfile
cat $file
exit
fi
for ((i=0;i<=20;i++))
do
if [ $i -eq 0 ];then
timed="1970-01-01"
fi
plc $1
timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
done

29
scpt/bsky_token.zsh Executable file
View File

@ -0,0 +1,29 @@
#!/bin/zsh
d=${0:a:h}
dd=${0:a:h:h}/json
#https://github.com/bluesky-social/atproto/issues/597
host=`cat ~/.config/atr/config.json|jq -r .host`
base=https://$host/xrpc
handle=`cat ~/.config/atr/config.json|jq -r .user`
pass=`cat ~/.config/atr/config.json|jq -r .pass`
f=~/.config/atr/token.json
curl -X POST -H "Content-Type: application/json" -d "{\"identifier\":\"$handle\",\"password\":\"$pass\"}" https://$host/xrpc/com.atproto.server.createSession | jq . >! $f
cat $f
if [ "$1" = "-a" ];then
handle=`cat $f| jq -r .handle`
token=`cat $f| jq -r .accessJwt`
url="$base/app.bsky.actor.getProfile?actor=$handle"
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/profile.json
cat $dd/profile.json
url=$base/app.bsky.feed.getTimeline
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/timeline.json
cat $dd/timeline.json
url=$base/app.bsky.notification.listNotifications
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/notify.json
cat $dd/notify.json|jq .
fi

40
scpt/card_box.zsh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/zsh
echo "not open"
exit
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
handle=$1
did=$2
cid=$3
uri=$4
if [ ! -d $HOME/.config/atr/txt ];then
mkdir -p $HOME/.config/atr/txt
fi
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
ran=$(($RANDOM % 10))
if [ $ran -eq 1 ];then
uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
else
uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
fi
body=`$atr chat "$uranai" -c`
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
exit

161
scpt/card_fortune.zsh Executable file
View File

@ -0,0 +1,161 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
handle=$1
did=$2
cid=$3
uri=$4
if [ ! -d $HOME/.config/atr/txt ];then
mkdir -p $HOME/.config/atr/txt
fi
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
ran=$(($RANDOM % 10))
if [ $ran -eq 1 ];then
uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
else
uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
fi
uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
if [ -z $uid ] || [ "$uid" = "null" ];then
body=`$atr chat "$uranai" -c`
body=`echo "占いにはアイのカードが3枚以上必要です\n\n$body"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
data=`curl -sL "$url/users/$uid"`
data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
luck_at=`echo $data|jq -r .luck_at`
luck_at_n=`date --iso-8601=seconds`
luck_at=`date -d "$luck_at" +"%Y%m%d"`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
if [ "$luck_at" = "$day_at" ];then
body=`$atr chat "$uranai" -c`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[].card"|sort|uniq|sed -e '1d'`
cp_n=`echo $cp_i|wc -l`
if [ 3 -gt $cp_n ];then
body=`$atr chat "$uranai" -c`
body=`echo "占いにはアイのカードが3枚以上必要です\n\n$body"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
ran=$(($RANDOM % $cp_n + 1))
luck=$(($RANDOM % 8))
sub=$(($RANDOM % 15))
card=`echo $cp_i|awk "NR==$ran"`
if [ $sub -eq $card ];then
sub="x2"
else
sub=`curl -sL $url_j|jq -r ".[]|select(.id == $sub)|.p"`
fi
j=`curl -sL $url_j|jq ".[]|select(.id == $card)"`
img=`echo $j|jq -r .img`
if [ -z $img ] || [ "$img" = "null" ];then
exit
fi
test_ran=`echo $(($RANDOM % 3))`
#text="アイ・カード占い"
case $test_ran in
1)
text=`$atr chat "アイのカード占いを作ってやってみて。感じる答えを出して。できれば140文字以内でお願い。" -c`
;;
2)
text=`$atr chat "今、アイが自分で考えた占いやってみて。気分が乗らなかったらやらなくていいよ。できれば140文字以内で答えてね。" -c`
;;
*)
text=`$atr chat "今のアイの気分で適当に占ってみて。できれば140文字以内で答えてね。" -c`
;;
esac
title=`echo $j|jq -r .h`
title="[${title}]"
#desc=`echo $j|jq -r .p`
if [ 0 -eq $luck ];then
desc="0"
fi
if [ 1 -eq $luck ];then
desc="1"
fi
if [ 2 -eq $luck ];then
desc="2"
fi
if [ 3 -eq $luck ];then
desc="3"
fi
if [ 4 -eq $luck ];then
desc="4"
fi
if [ 5 -eq $luck ];then
desc="5"
fi
if [ 6 -eq $luck ];then
desc="6"
fi
if [ 7 -eq $luck ];then
desc="7"
fi
desc=`echo "アイ数字は${luck}"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link;then
echo $cid >! $tcid
fi
fi
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
if [ $luck -eq 7 ];then
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck, \"next\": \"$nd\"}" -s $url/users/$uid`
else
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck}" -s $url/users/$uid`
fi
exit

147
scpt/card_fortune_en.zsh Executable file
View File

@ -0,0 +1,147 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
handle=$1
did=$2
cid=$3
uri=$4
if [ ! -d $HOME/.config/atr/txt ];then
mkdir -p $HOME/.config/atr/txt
fi
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
ran=$(($RANDOM % 10))
if [ $ran -eq 1 ];then
uranai="Please do a of today's rune-fortune. Tell us the result in 120 characters or less."
else
uranai="Please do a of today's tarot-fortune. Tell us the result in 120 characters or less."
fi
uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
if [ -z $uid ] || [ "$uid" = "null" ];then
body=`$atr chat "$uranai" -c`
body=`echo "At least 3 cards of the Eye are required for divination\n\n$body"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
data=`curl -sL "$url/users/$uid"`
data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
luck_at=`echo $data|jq -r .luck_at`
luck_at_n=`date --iso-8601=seconds`
luck_at=`date -d "$luck_at" +"%Y%m%d"`
day_at=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 days ago'`
if [ "$luck_at" = "$day_at" ];then
body=`$atr chat "$uranai" -c`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[].card"|sort|uniq|sed -e '1d'`
cp_n=`echo $cp_i|wc -l`
if [ 3 -gt $cp_n ];then
body=`$atr chat "$uranai" -c`
body=`echo "At least 3 cards of the Eye are required for divination\n\n$body"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
fi
exit
fi
ran=$(($RANDOM % $cp_n + 1))
luck=$(($RANDOM % 8))
sub=$(($RANDOM % 15))
card=`echo $cp_i|awk "NR==$ran"`
if [ $sub -eq $card ];then
sub="x2"
else
sub=`curl -sL $url_j|jq -r ".[]|select(.id == $sub)|.p"`
fi
j=`curl -sL $url_j|jq ".[]|select(.id == $card)"`
img=`echo $j|jq -r .img`
if [ -z $img ] || [ "$img" = "null" ];then
exit
fi
text="AI Card Fortune Telling"
title=`echo $j|jq -r .h_en`
title="[${title}]"
#desc=`echo $j|jq -r .p`
if [ 0 -eq $luck ];then
desc="0"
fi
if [ 1 -eq $luck ];then
desc="1"
fi
if [ 2 -eq $luck ];then
desc="2"
fi
if [ 3 -eq $luck ];then
desc="3"
fi
if [ 4 -eq $luck ];then
desc="4"
fi
if [ 5 -eq $luck ];then
desc="5"
fi
if [ 6 -eq $luck ];then
desc="6"
fi
if [ 7 -eq $luck ];then
desc="7"
fi
desc=`echo "lucky number ${luck}"`
if [ "`cat $tcid`" != "$cid" ];then
if $atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link;then
echo $cid >! $tcid
fi
fi
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
if [ $luck -eq 7 ];then
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck, \"next\": \"$nd\"}" -s $url/users/$uid`
else
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck}" -s $url/users/$uid`
fi
exit

154
scpt/card_pay.zsh Executable file
View File

@ -0,0 +1,154 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
host_card=https://card.syui.ai/json/card.json
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
handle=$1
username=`echo $1|cut -d . -f 1`
did=$2
cid=$3
uri=$4
pay=60000
echo $handle
function card_d(){
j=`curl -sL $host_card |jq -r ".[]|select(.ten_skill == true)"|jq -s`
n=`echo $j|jq length`
n_leng=$n
n=$(($RANDOM % n - 1))
card=`echo $j|jq -r ".[$n].id"`
img=`echo $j|jq -r ".[$n].img"`
ten=`echo $j|jq -r ".[$n].ten"`
title=`echo $j|jq -r ".[$n].h"`
title="[$title]"
ran_a=$(($RANDOM % 1000))
cp=$((ran_a + 500))
ran_s=$(($RANDOM % 5))
skill=ten
if [ $ran_s -eq 1 ];then
s=super
cp=$((cp + $ran_a))
else
s=normal
fi
#card=1;skill=3d;s=3d
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
aiten=`echo $data|jq -r .aiten`
model=`echo $data|jq -r .model`
model_mode=`echo $data|jq -r .model_mode`
model_attack=`echo $data|jq -r .model_attack`
model_skill=`echo $data|jq -r .model_skill`
model_limit=`echo $data|jq -r .model_limit`
model_critical=`echo $data|jq -r .model_critical`
model_critical_d=`echo $data|jq -r .model_critical_d`
ten_data=`echo $all_data|jq ".|sort_by(.aiten)|reverse|.[]|select(.aiten >= $pay)"`
model_critical=$((RANDOM % 10 + model_critical))
json_model="{\"model_critical\":$model_critical, \"token\":\"$token\"}"
body_d=`echo "[card]\nid : $card\ncp : $cp\nstatus : $s\nskill : $skill\n---\n[model]\ncritical : ${model_critical}%"`
}
function card_user(){
if [ -z "$ten_data" ] || [ -z "$aiten" ] || [ $aiten -le $pay ];then
echo "aiten : $aiten >= $pay [1/${n_leng}]"
exit
else
pay_s=$((aiten - pay))
if [ $pay_s -lt 0 ] || [ -z "$pay_s" ];then
echo "aiten : $aiten >= $pay [1/${n_leng}]"
exit
fi
body_user=`echo "${aiten} : $aiten - $pay = $pay_s [1/${n_leng}]"`
fi
}
function card_check(){
data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
card_check_skill=`echo $card_check|jq "select(.skill == \"$skill\")"`
if [ -n "$card_check" ] && [ -n "$card_check_skill" ];then
echo "$body_user"
echo "lost, you chose the card you already have..."
echo "ai[model] Lv up!"
s_up=$((RANDOM % 3 + 1))
case `echo $((RANDOM % 4))` in
0)
model_mode=$((model_mode + s_up))
json="{\"token\":\"$token\", \"model_mode\": $model_mode}"
echo "\"mode\": Lv${model_mode}"
;;
1)
model_attack=$((model_attack + s_up))
json="{\"token\":\"$token\", \"model_attack\": $model_attack}"
echo "\"attack\": Lv${model_attack}"
;;
2)
model_skill=$((model_skill + s_up))
json="{\"token\":\"$token\", \"model_skill\": $model_skill}"
echo "\"skill\": Lv${model_skill}"
;;
3)
model_limit=$((model_limit + s_up))
json="{\"token\":\"$token\", \"model_limit\": $model_limit}"
echo "\"burst\": Lv${model_limit}"
;;
*)
model_limit=$((model_limit + s_up))
json="{\"token\":\"$token\", \"model_limit\": $model_limit}"
echo "\"burst\": Lv${model_limit}"
;;
esac
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "$json" -s $host/users/$uid`
card=0
cp=1
s=super
skill=lost
#echo "try again next time!"
echo "[card]"
echo "id : $card"
echo "cp : $cp"
echo "skill : $skill"
if [ "$handle" != "ai" ];then
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": $pay_s}" -s $host/users/$uid`
fi
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
exit
fi
}
function card_pay(){
link=https://card.syui.ai/$username
text=`echo "$body_user\n$body_d"`
desc="[$ten]"
if [ "$handle" != "ai" ];then
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": $pay_s, \"model_critical\": $model_critical}" -s $host/users/$uid`
else
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": 10000000, \"model_critical\": $model_critical}" -s $host/users/$uid`
echo $tmp
fi
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
echo "$text"
#echo "$atr reply-og \"$text\" --cid $cid --uri $uri --img $img --title \"$title\" --description \"$desc\" --link $link"
#tmp_atr=`$atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link`
}
card_d
card_user
card_check
card_pay

37
scpt/card_tarot.zsh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
handle=$1
did=$2
cid=$3
uri=$4
if [ ! -d $HOME/.config/atr/txt ];then
mkdir -p $HOME/.config/atr/txt
fi
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
ran=$(($RANDOM % 10))
if [ $ran -eq 1 ];then
uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
else
uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
fi
body=`$atr chat "$uranai" -c`
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
exit

37
scpt/card_tarot_en.zsh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
handle=$1
did=$2
cid=$3
uri=$4
if [ ! -d $HOME/.config/atr/txt ];then
mkdir -p $HOME/.config/atr/txt
fi
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
ran=$(($RANDOM % 10))
if [ $ran -eq 1 ];then
uranai="Please do a of today's rune-fortune. Tell us the result in 120 characters or less."
else
uranai="Please do a of today's tarot-fortune. Tell us the result in 120 characters or less."
fi
body=`$atr chat "$uranai" -c`
if $atr r "$body" -c $cid -u $uri;then
echo $cid >! $tcid
fi
exit

108
scpt/diffusers.zsh Executable file
View File

@ -0,0 +1,108 @@
#!/bin/zsh
dir=${0:a:h}
mkdir -p $dir/png
f=$dir/png/t.png
f_sleep=$dir/png/sleep
cfg=$dir/stable_diffusion_prompt.j
cfg_did=$dir/stable_diffusion_did.txt
opt_af=$dir/stable_diffusion_a.txt
opt_bf=$dir/stable_diffusion_b.txt
opt_allf=$dir/stable_diffusion_all.txt
if [ ! -f $cfg_did ];then
touch $cfg_did
fi
did=$1
admin=did:plc:uqzpqmrjnptsxezjx4xuh2mn
if [ ! -f $cfg ];then
echo no file $cfg
exit
fi
opt_a=`echo $@|cut -d ' ' -f 2`
opt_b=`echo $@|cut -d ' ' -f 3`
#case "$opt_b" in
# bluesky|sky|field|girl|anime|universe|earth|bird|miku|ai|yui|card|blue|cat)
# ;;
# *)
# if [ -n "$opt_b" ] && [ "$did" != "$admin" ];then
# opt_b=nyancat
# fi
# ;;
#esac
echo $opt_a >! $opt_af
echo $opt_b >! $opt_bf
echo $@ >! $opt_allf
case "$opt_a" in
-p|p)
q="$opt_b , masterpiece, best quality, 8k wallpaper Highly, cinematic Lighting, cinematic Beautiful"
;;
-t|t)
tag=$opt_b
json=`cat $cfg|jq ".[]|select(.tag == \"${tag}\")"`
if [ -z "$json" ] || [ -z "$tag" ];then
echo no tag
exit
fi
json=`echo $json|jq -s`
n=`echo $json|jq "length"`
n=$((RANDOM % n))
q=`echo $json|jq -r ".[$n].body"`
#m=`echo $json|jq -r ".[$n].model"`
;;
*)
n=`cat $cfg|jq "length"`
n=$((RANDOM % n))
q=`cat $cfg|jq -r ".[$n].body"`
;;
esac
model_s="model
coharu
flat2d
pastelmix
pvcstyle"
model_r=$((RANDOM % `echo "$model_s"|wc -l` + 1))
m=`echo "$model_s"|awk "NR==$model_r"`
case $1 in
-pm)
m=$2
q=`echo $@ | cut -d ' ' -f 3-`
;;
esac
if [ -z "$q" ];then
echo no prompt
exit
fi
if [ -z "$m" ];then
m=model
fi
echo $q
echo $m
function run(){
if [ -f $f_sleep ];then
rm $f_sleep
fi
ssh ue "conda activate ldm;cd ./stable-diffusion/;python safe.py \'${q}\' ${m}"
scp -r ue:stable-diffusion/t.png $f
if [ $? -ne 0 ];then
touch $f_sleep
fi
}
if [ -n "`cat $cfg_did| grep -x $did`" ] && [ "$did" != "$admin" ];then
rm $f
else
echo "\n$did" >> $cfg_did
run
fi

7
scpt/dig.zsh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/zsh
txt=_atproto.$1
did=$2
curl -sL plc.directory/$did/log |jq ".[]|.alsoKnownAs|.[]?" | grep -n .| head -n 4
dig -t TXT $txt|grep "did=did:plc:"|head -n 1

145
scpt/fan_art.zsh Executable file
View File

@ -0,0 +1,145 @@
#!/bin/zsh
url_plc="https://plc.directory/export"
host_at=bsky.social
url=https://plc.directory
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
dir=$HOME/.config/atr/txt
file=$dir/user_list.txt
opt=`echo $4|tr -d "'"`
dir_git_card_page=$HOME/git/card.syui.ai
if [ ! -d $dir_git_card_page ];then
mkdir -p $HOME/git
cd $HOME/git
git clone https://github.com/syui/card.syui.ai
else
cd $dir_git_card_page
t=`git pull`
fi
file_fanart=$dir_git_card_page/public/json/fanart.json
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
created_at=`date --iso-8601=seconds`
#if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ];then
# exit
#fi
function fan_art_search() {
k="aifanart"
url="search.bsky.social/search/posts?q="
t=`curl -sL "${url}${k}"|jq ".[]|select(.post.text == \"$k\")"`
#n=`curl -sL "${url}${k}"|jq length`
n=$((n - 1))
for ((i=0;i<=$n;i++))
do
did=`curl -sL "${url}${k}"|jq -r ".[$i]|.user.did"`
handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs|.[]"|cut -d / -f 3-`
if [ -z "$handle" ];then
continue
fi
tid=`curl -sL "${url}${k}"|jq -r ".[$i]|.tid"|cut -d / -f 2`
http=https://staging.bsky.app/profile/$handle/post/$tid
echo $http
done
}
if [ "$1" = "-s" ];then
fan_art_search
exit
fi
if ! echo $1|grep "." >/dev/null 2>&1;then
echo "ex : user syui.bsky.social"
exit
fi
if ! echo $2|grep "did:plc:" >/dev/null 2>&1;then
echo "ex : user did"
exit
fi
if [ "$3" = "-l" ];then
curl -sL card.syui.ai/json/fanart.json|jq -r ".[]|.author, .link"
exit
fi
if ! echo $3|grep -e "bsky.app/profile/" -e "nostter.vercel.app" >/dev/null 2>&1;then
echo "please url : bsky.app/profile/$1/post/xxx"
exit
fi
if ! echo $4|grep -e "https://av-cdn.bsky.app/img" -e "https://nostr.build/i/" >/dev/null 2>&1;then
if [ "$opt" != "-d" ];then
echo "please url : av-cdn.bsky.social/img"
exit
fi
fi
function fan_art(){
add=$1
did=$2
if echo $3|grep "nostter.vercel.app" >/dev/null 2>&1;then
link=`echo $3|cut -d / -f 1-4`
else
link=$3
fi
img=`echo $4|tr -d "'"`
author=`echo $3|cut -d / -f 5`
if [ -z "$author" ];then
author="nostr"
fi
cd $dir_git_card_page
check_null=`cat $file_fanart|jq ".[]|select(.img == \"$img\")"`
if [ -n "$check_null" ];then
echo registered
exit
fi
echo `cat $file_fanart` "[{\"add\":\"$add\",\"link\":\"$link\",\"author\":\"$author\",\"img\":\"$img\",\"created_at\":\"$created_at\",\"did\":\"$did\"}]" | jq -s add >! $file_fanart.back
if cat $file_fanart.back|jq . >/dev/null 2>&1;then
mv $file_fanart.back $file_fanart
git add $file_fanart
git commit -m "add fanart"
git push -u origin main -f
echo add fanart, thx $1
echo "author : $author"
echo "it will take some time to deploy"
fi
}
function fan_art_delete(){
add=$1
did=$2
link=$3
cd $dir_git_card_page
check_null=`cat $file_fanart|jq ".[]|select(.img == \"$img\")"`
if [ -n "$check_null" ];then
echo registered
exit
fi
cat $file_fanart|jq ".[]|select(.link == \"$link\")|= .+{\"delete\":true,\"delete-did\":\"$did\"}"|jq -s >! $file_fanart.back
if cat $file_fanart.back|jq . >/dev/null 2>&1;then
mv $file_fanart.back $file_fanart
git add $file_fanart
git commit -m "delete fanart"
git push -u origin main -f
echo delete fanart, thx $1
echo "delete-did : $did"
echo "it will take some time to deploy"
fi
}
if [ "$opt" = "-d" ];then
fan_art_delete $1 $2 $3
exit
fi
fan_art $1 $2 $3 $4
exit

75
scpt/follow_all.zsh Executable file
View File

@ -0,0 +1,75 @@
#!/bin/zsh
d=$HOME/.config/atr/txt
mkdir -p $d
unset cursor
function page(){
s=$1
if [ "$s" = "ers" ];then
opt="-w"
elif [ "$s" = "s" ];then
opt="-s"
fi
f=$d/follow${s}_${ii}.json
echo $f
if [ -n "$cursor" ];then
if [ ! -f $f ];then
atr follow $opt -c $cursor| jq . >! $f
else
echo no download
fi
else
if [ ! -f $f ];then
atr follow $opt| jq . >! $f
else
echo no download
fi
fi
cursor=`cat $f|jq -r .cursor`
echo "------------------------------"
echo $cursor
echo "------------------------------"
n=`cat $f|jq ".follow${s}|length"`
n=`expr $n - 1`
for ((i=0;i<=$n;i++))
do
handle=`cat $f|jq -r ".follow${s}|.[$i].handle"`
did=`cat $f|jq -r ".follow${s}|.[$i].did"`
flg=`cat $f|jq -r ".follow${s}|.[$i].viewer.following"`
flb=`cat $f|jq -r ".follow${s}|.[$i].viewer.followedBy"`
if [ "$flg" = "null" ];then
echo following
echo $flb
echo "follow : $handle"
echo "atr follow $did"
atr follow $did
fi
if [ "$flb" = "null" ];then
rkey=${flg##*/}
echo followedBy
echo $flg
echo "unfollow : $handle"
echo "atr follow $did -d $rkey"
atr follow $did -d $rkey
fi
done
}
ii=1
while [ "$cursor" != "null" ]
do
page ers $ii
ii=`expr $ii + 1`
done
unset cursor
ii=1
while [ "$cursor" != "null" ]
do
page s $ii
ii=`expr $ii + 1`
done

126
scpt/full_moon.j Normal file
View File

@ -0,0 +1,126 @@
[
{"data":"20231003"},
{"data":"20230107"},
{"data":"20230122"},
{"data":"20230206"},
{"data":"20230220"},
{"data":"20230307"},
{"data":"20230322"},
{"data":"20230406"},
{"data":"20230420"},
{"data":"20230506"},
{"data":"20230520"},
{"data":"20230604"},
{"data":"20230618"},
{"data":"20230703"},
{"data":"20230718"},
{"data":"20230802"},
{"data":"20230816"},
{"data":"20230831"},
{"data":"20230915"},
{"data":"20230929"},
{"data":"20231015"},
{"data":"20231029"},
{"data":"20231113"},
{"data":"20231127"},
{"data":"20231213"},
{"data":"20231227"},
{"data":"20240111"},
{"data":"20240126"},
{"data":"20240210"},
{"data":"20240224"},
{"data":"20240310"},
{"data":"20240325"},
{"data":"20240409"},
{"data":"20240424"},
{"data":"20240508"},
{"data":"20240523"},
{"data":"20240606"},
{"data":"20240622"},
{"data":"20240706"},
{"data":"20240721"},
{"data":"20240804"},
{"data":"20240820"},
{"data":"20240903"},
{"data":"20240918"},
{"data":"20241003"},
{"data":"20241017"},
{"data":"20241101"},
{"data":"20241116"},
{"data":"20241201"},
{"data":"20241215"},
{"data":"20241231"},
{"data":"20250114"},
{"data":"20250129"},
{"data":"20250212"},
{"data":"20250228"},
{"data":"20250314"},
{"data":"20250329"},
{"data":"20250413"},
{"data":"20250428"},
{"data":"20250513"},
{"data":"20250527"},
{"data":"20250611"},
{"data":"20250625"},
{"data":"20250711"},
{"data":"20250725"},
{"data":"20250809"},
{"data":"20250823"},
{"data":"20250908"},
{"data":"20250922"},
{"data":"20251007"},
{"data":"20251021"},
{"data":"20251105"},
{"data":"20251120"},
{"data":"20251205"},
{"data":"20251220"},
{"data":"20260103"},
{"data":"20260119"},
{"data":"20260202"},
{"data":"20260217"},
{"data":"20260303"},
{"data":"20260319"},
{"data":"20260402"},
{"data":"20260417"},
{"data":"20260502"},
{"data":"20260517"},
{"data":"20260531"},
{"data":"20260615"},
{"data":"20260630"},
{"data":"20260714"},
{"data":"20260729"},
{"data":"20260813"},
{"data":"20260828"},
{"data":"20260911"},
{"data":"20260927"},
{"data":"20261011"},
{"data":"20261026"},
{"data":"20261109"},
{"data":"20261124"},
{"data":"20261209"},
{"data":"20261224"},
{"data":"20260103"},
{"data":"20260119"},
{"data":"20260202"},
{"data":"20260217"},
{"data":"20260303"},
{"data":"20260319"},
{"data":"20260402"},
{"data":"20260417"},
{"data":"20260502"},
{"data":"20260517"},
{"data":"20260531"},
{"data":"20260615"},
{"data":"20260630"},
{"data":"20260714"},
{"data":"20260729"},
{"data":"20260813"},
{"data":"20260828"},
{"data":"20260911"},
{"data":"20260927"},
{"data":"20261011"},
{"data":"20261026"},
{"data":"20261109"},
{"data":"20261124"},
{"data":"20261209"},
{"data":"20261224"}]

14
scpt/invite.zsh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/zsh
admin_password=`cat $HOME/.config/atr/api_card.json|jq -r .pds_admin_password`
if [ -n "$1" ];then
host=$1
else
host=syu.is
fi
url=https://$host/xrpc/com.atproto.server.createInviteCode
json="{\"useCount\":30}"
echo $url
echo $admin_password
#curl -X POST -u admin:${admin_password} -H "Content-Type: application/json" -d "$json" -sL $url | jq -r .code
curl -X POST -u admin:${admin_password} -H "Content-Type: application/json" -d "$json" -sL $url

40
scpt/like_reply.zsh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
host=api.syui.ai
data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.like)|reverse|.[]|select(.like_rank > 1)"`
tmp=`echo $data|jq -s`
n=`echo $tmp|jq "length"`
ran=$(($RANDOM % n - 1))
echo $ran
function did() {
user=`echo $tmp|jq -r ".[$ran].username"`
did=`echo $tmp|jq -r ".[$ran].did"`
}
function tl(){
did
cid=`$atr f $did|jq -r ".records|.[0].cid"`
uri=`$atr f $did|jq -r ".records|.[0].uri"`
text=`$atr f $did|jq -r ".records|.[0].value.text"`
echo $cid
echo $uri
echo $text
find=`echo $text|grep "card.syui.ai"`
find_t=`echo $text|grep "ten : "`
if [ -n "$find" ] || [ -n "$find_t" ];then
exit
fi
text=`$atr chat "$text" -c`
echo $text
}
function reply(){
tl
if [ -n "$text" ] && [ -n "$uri" ];then
$atr r "$text" -u $uri -c $cid
fi
}
reply

390
scpt/mastodon.zsh Executable file
View File

@ -0,0 +1,390 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
PATH=$PATH:$HOME/.cargo/bin
d=$HOME/.config/msr
f=$HOME/.config/msr/notify_log.txt
card=$HOME/.config/atr/scpt/api_card.zsh
if [ ! -d $d ];then
mkdir -p $d
fi
j=`$HOME/.cargo/bin/msr bot`
tmp=`echo $j|jq length`
if [ $tmp -eq 0 ];then
exit
fi
data_id=`echo $j|jq -r ".id"`
n=`echo $data_id|wc -l`
data_mid=`echo $j|jq -r ".mid"`
data_text=`echo $j|jq -r ".body"`
data_url=`echo $j|jq -r ".url"`
data_server=`echo $j|jq -r ".url"|cut -d / -f 3`
data_user=`echo $j|jq -r ".user"`
function user_create() {
if [ -n "$ap" ] && [ -n "$url" ];then
data=`curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"$ap\",\"password\":\"$pass\",\"did\":\"$url\",\"next\":\"$nd_o\",\"updated_at\":\"$updated_at_o\"}" -sL "$host/users"`
uid=`echo $data|jq -r ".id"`
echo id $uid
else
echo error user create
fi
}
function card_env() {
card_url=https://card.syui.ai
host=https://api.syui.ai
d=`date +"%Y%m%d"`
nd=`date +"%Y%m%d" -d '1 day'`
nd_o=`date +"%Y%m%d" -d '-1 day'`
updated_at_o=`date --iso-8601=seconds -d '-1 day'`
username=`echo $1|cut -d . -f 1`
url_user_all="$host/users?itemsPerPage=2000"
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
data_tmp=`curl -sL $url_user_all`
data=`echo "$data_tmp"|jq ".[]|select(.username == \"$ap\")"`
if [ -z "$data" ];then
data=`echo "$data_tmp"|jq ".[]|select(.username == \"$username\")"`
fi
if [ -z "$data" ];then
echo no $username
user_create
fi
username=`echo $data|jq -r .username`
data_did_check=`echo $data|jq -r .did`
uid=`echo $data|jq -r ".id"`
delete=`echo $data|jq -r ".delete"`
mastodon=`echo $data|jq -r ".mastodon"`
did=`echo $data|jq -r ".did"`
handle_change=`echo $data|jq -r ".handle"`
raid_at=`echo $data|jq -r .raid_at`
raid_at=`date -d "$raid_at" +"%Y%m%d"`
raid_at_n=`date --iso-8601=seconds`
server_at=`echo $data|jq -r .server_at`
server_at=`date -d "$server_at" +"%Y%m%d"`
server_at_n=`date --iso-8601=seconds`
updated_at=`echo $data|jq -r .updated_at`
updated_at=`date -d "$updated_at" +"%Y%m%d"`
updated_at_n=`date --iso-8601=seconds`
next=`echo $data|jq -r .next`
aiten=`echo $data|jq -r .aiten`
ten_su=`echo $data|jq -r .ten_su`
if [ "$a_team" = false ];then
echo "bsky @${username}"
echo "no activitypub-mode"
return 0
fi
echo "$card_url/$username"
}
function card_day() {
card_env $1
if [ $next -gt $d ] || [ "$updated_at" = "$d" ];then
echo limit 1 day
return 0
fi
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
card=`echo $tmp|jq -r .card`
card_url=`echo $tmp|jq -r .url`
cp=`echo $tmp|jq -r .cp`
skill=`echo $tmp|jq -r .skill`
if [ -z "$card" ];then
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
card=`echo $tmp|jq -r .card`
card_url=`echo $tmp|jq -r .url`
cp=`echo $tmp|jq -r .cp`
skill=`echo $tmp|jq -r .skill`
fi
echo "[card]"
echo id : $card
echo cp : $cp
if [ "$skill" != "normal" ];then
echo skill : $skill
fi
t=`echo $tmp|jq -r .card`
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"next\":\"$nd\",\"token\":\"$token\"}" -sL $host/users/$uid`
}
function card_b() {
card_env $1
if [ $updated_at -ge $d ] || [ "$updated_at" = "$d" ];then
echo "limit battle"
return 0
fi
id_all=`curl -sL "$host/users?itemsPerPage=2000"|jq ".[]|.id"`
id_n=`echo "$id_all"|wc -l`
id_nr=$(($RANDOM % $id_n))
r=`echo "$id_all"| awk "NR==$id_nr"`
if [ "$id_all" = "null" ];then
r=2
fi
if [ 0 -eq $id_n ] || [ 0 -eq $r ];then
r=2
fi
if [ -z "$id_n" ] || [ -z "$r" ];then
r=2
fi
data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
data_u=`curl -sL "$host/users/$r/card?itemsPerPage=2000"`
tt=`echo $data_uu|jq ".[].cp"|sort -n -r`
ttt=`echo $data_u|jq ".[].cp"|sort -n -r`
#echo $data_u|jq ".[].cp"
nl=`echo $data_uu|jq length`
if [ $nl -ge 3 ];then
rs=$(($RANDOM % 3 + 1))
else
rs=$(($RANDOM % $nl + 1))
fi
#echo $data_u|jq ".[].cp"
nll=`echo $data_u|jq length`
rss=$(($RANDOM % $nll))
if [ $nll -ge 3 ];then
rss=$(($RANDOM % 3 + 1))
else
rss=$(($RANDOM % $nll + 1))
fi
cp_i=`echo $tt |awk "NR==$rs"`
cp_b=`echo $ttt |awk "NR==$rss"`
if [ -z "$cp_i" ];then
echo "null error"
return 0
fi
if [ -z "$cp_b" ];then
echo "null error"
return 0
fi
echo $tt | sed -n 1,3p
echo "---"
echo id : $r
echo $ttt | sed -n 1,3p
echo "---"
echo $cp_i vs $cp_b
if [ $cp_i -gt $cp_b ];then
echo "win!"
else
echo loss
fi
if [ $cp_i -gt $cp_b ];then
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
card=`echo $tmp|jq -r .card`
card_url=`echo $tmp|jq -r .url`
cp=`echo $tmp|jq -r .cp`
if [ -z "$card" ];then
tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
card=`echo $tmp|jq -r .card`
card_url=`echo $tmp|jq -r .url`
cp=`echo $tmp|jq -r .cp`
fi
echo "[card]"
echo id : $card
echo cp : $cp
t=`echo $tmp|jq -r .card`
fi
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"updated_at\":\"$updated_at_n\",\"token\":\"$token\"}" -sL $host/users/$uid`
}
function card_s(){
card_env $1
username=$1
a_team=mastodon
b_team=bluesky
rr=`date +"%H%M"`
f_server=$HOME/.config/atr/txt/card_server.txt
f_server_user_at=$HOME/.config/atr/txt/card_server_user_at.txt
f_server_user_ap=$HOME/.config/atr/txt/card_server_user_ap.txt
f_server_ap=$HOME/.config/atr/txt/card_server_ap.txt
f_server_at=$HOME/.config/atr/txt/card_server_at.txt
f_server_start_time=$HOME/.config/atr/txt/card_server_start_time.txt
if [ `cat $f_server` -eq 1 ];then
echo shutdown server battle
exit
fi
if [ ! -f $f_server_start_time ];then
server_start=`date +"%H%M"`
echo "$server_start" >! $f_server_start_time
echo 0 >! $f_server_at
echo 0 >! $f_server_ap
fi
cp_ap=`cat $f_server_ap`
cp_at=`cat $f_server_at`
if [ -f $f_server_start_time ];then
server_start=`cat $f_server_start_time`
server_time=`date -d "$server_start 30 min" +"%H%M"`
fi
#echo "time:`date -d "$server_time" +"%H:%M"`"
if [ $server_at -ge $d ] || [ "$server_at" = "$d" ];then
echo "limit battle"
exit
fi
data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
fav_card=`echo $data_uu|jq "sort_by(.cp)|reverse|.[0]"`
if [ ! -f $f_server_user_at ];then
echo start >> $f_server_user_at
fi
if [ ! -f $f_server_user_ap ];then
echo start >> $f_server_user_ap
fi
commit_user_at=`cat $f_server_user_at|tail -n 1`
commit_user_ap=`cat $f_server_user_ap|tail -n 1`
echo $username >> $f_server_user_ap
cp_i=`echo $fav_card|jq -r ".cp"`
cp_ii=$cp_i
card_name=`echo $fav_card|jq -r ".card"`
card_status=`echo $fav_card|jq -r ".status"`
card_skill=`echo $fav_card|jq -r ".skill"`
skill=$card_skill
if [ "$skill" = "critical" ];then
cp_i=$((cp_i + cp_i))
fi
if [ "$skill" = "dragon" ];then
cp_i=$((cp_i * 3))
fi
if [ "$skill" = "yui" ];then
cp_i=$((cp_i + ten_su))
fi
cp_all=$((cp_i + cp_ap))
# サーバーバトルの還元期間
#cp_all=$((cp_ap - cp_i))
if [ "$skill" = "critical" ];then
echo "$cp_i ---> $cp_ap"
elif [ "$skill" = "post" ];then
cp_post=`$HOME/.cargo/bin/atr pro $1 -p`
cp_i=$((cp_i + cp_post))
cp_all=$((cp_i + cp_ap))
echo "🔥 $cp_i ---> $cp_ap"
elif [ "$skill" = "luck" ];then
echo "$cp_i ---> $cp_ap"
elif [ "$skill" = "dragon" ];then
echo "🐉 $cp_i ---> $cp_ap"
elif [ "$skill" = "yui" ];then
echo "🔅 $cp_i ---> $cp_ap"
else
echo "$cp_i ---> $cp_ap"
fi
echo $cp_all >! $f_server_ap
echo
echo "[${a_team}] ${cp_all}"
echo "┣ @${username}"
echo "┗ @${commit_user_ap}"
echo
echo "┏━ vs ━┛"
echo
echo "[${b_team}] ${cp_at}"
echo "┗ @${commit_user_at}"
#echo "[log]"
#echo "${cp_ap}/$a_team --> ${commit_user_ap}"
#echo "${commit_user_at} <-- ${cp_at}/$b_team"
#echo "${username} --> $cp_all/$a_team"
if [ $rr -gt $server_time ];then
#echo "----"
#echo "timeup!"
echo 1 >! $f_server
rm $f_server_start_time
rm $f_server_at
rm $f_server_ap
mv $f_server_user_at $f_server_user_at.back
mv $f_server_user_ap $f_server_user_ap.back
fi
echo "----"
cp_plus=$(($RANDOM % 100 + 1))
cp=$((cp_ii + cp_plus))
body="level up!"
echo "${body}${cp}(+${cp_plus})"
tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$fav`
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"server_at\":\"$server_at_n\", \"token\":\"$token\"}" -s $host/users/$uid`
}
function mastodon_notify() {
for ((i=1;i<=$n;i++))
do
mid=`echo $data_mid|awk "NR==$i"`
check=`cat $f|grep $mid`
if [ -n "$check" ];then
echo ok
continue
fi
url=`echo $data_url|awk "NR==$i"`
user=`echo $data_user|awk "NR==$i"`
text=`echo $data_text|awk "NR==$i"`
server=`echo $data_server|awk "NR==$i"`
ap="@${user}@${server}"
if [ -f "$GOPATH/bin/pup" ];then
text=`echo ${text}|pup "p text{}"|tail -n 1|cut -d " " -f 2-|tr -d '"'|sed -e "s/&#39;/'/g" -e 's/&quot;/"/g'`
else
text=`echo ${text}|sed -e 's/<[^>]*>//g'|cut -d " " -f 2-|tr -d '"'|sed -e "s/&#39;/'/g" -e 's/&quot;/"/g'`
fi
echo $text
com=`echo $text|cut -d " " -f 1`
opt=`echo $text|cut -d " " -f 2`
if [ "card" = "$com" ] || [ "/card" = "$com" ];then
if [ "b" = "$opt" ] || [ "-b" = "$opt" ];then
text=`card_b $user`
echo $user $text
msr cn "@${user}@${server} `echo $text`" -mm $mid
echo $mid >> $f
continue
fi
if [ "s" = "$opt" ] || [ "-s" = "$opt" ];then
text=`card_s $user`
echo $user $text
msr cn "@${user}@${server} `echo $text`" -mm $mid
echo $mid >> $f
continue
fi
text=`card_day $user`
echo $user $text
msr cn "@${user}@${server} `echo $text`" -mm $mid
echo $mid >> $f
fi
done
}
mastodon_notify

107
scpt/nyancat.zsh Executable file
View File

@ -0,0 +1,107 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host=https://api.syui.ai
host_card=https://card.syui.ai/json/card.json
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
handle=$1
username=`echo $1|cut -d . -f 1`
did=$2
cid=$3
uri=$4
opt=$5
pay=100
eat_file=$HOME/.config/atr/txt/nyancat_eat.txt
ran=`echo $(($RANDOM % 15))`
eat="🍺☕ 🍵 🍶 🍼🍻 🍸 🍹 🍷 🍴 🍕 🍔 🍟 🍗 🍖 🍝🍛 🍤 🍱 🍣 🍥 🍙 🍘 🍚 🍜 🍲 🍢🍡 🍳 🍞 🍩 🍮 🍦 🍨 🍧 🎂 🍰 🍪🍫 🍬 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉🍓 🍑 🍈 🍌 🍐 🍍 🍠 🍆 🍅 🌽"
eat=`echo $eat|grep "$opt"`
if [ -z "$eat" ];then
ran=`echo $(($RANDOM % 3))`
if [ $ran -eq 1 ];then
body="| キュー"
elif [ $ran -eq 2 ];then
body="| ミュー"
else
body="| ピャー"
fi
echo "uncooked"
echo "A__A
|・ㅅ・ |
|っ c|
$body
U ̄ ̄U"
exit
fi
echo "| ${opt} |" >> $eat_file
body_d="A__A
|・ㅅ・ |
|っ c|
`tac $eat_file|grep -v '| |'`
U ̄ ̄U"
function card_user(){
all_data=`curl -sL "$host/users?itemsPerPage=3000"`
data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
uid=`echo $data|jq -r .id`
aiten=`echo $data|jq -r .aiten`
like=`echo $data|jq -r .like`
ten_data=`echo $all_data|jq ".|sort_by(.aiten)|reverse|.[]|select(.aiten >= $pay)"`
if [ -z "$ten_data" ] || [ -z "$aiten" ] || [ $aiten -le $pay ];then
echo "aiten : $aiten >= $pay"
echo "failed to buy food"
echo "please : @yui.syui.ai /ten"
exit
else
pay_s=$((aiten - pay))
like_s=$((like + 1))
if [ $pay_s -le 0 ] || [ -z "$pay_s" ];then
echo "aiten : $aiten >= $pay"
echo "failed to buy food"
echo "please : @yui.syui.ai /ten"
exit
fi
body_user=`echo "${aiten} : $aiten - $pay = $pay_s"`
fi
}
function card_like() {
if [ $like -gt 3 ] && [ $ran -eq 1 ];then
echo "happy!"
su=`cat $eat_file|wc -l`
su=$((su * 50))
pay_s=$((aiten + su))
body_user=`echo "${aiten} : $aiten + $su = $pay_s"`
rm $eat_file
echo "| ${opt} |" >> $eat_file
body_d="A__A
|・ㅅ・ |
|っ c|
`tac $eat_file|grep -v '| |'`
U ̄ ̄U"
fi
}
function card_pay(){
link=https://card.syui.ai/$username
text=`echo "$body_user\n$body_d"`
desc="[$ten]"
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"like\":$like_s,\"token\":\"$token\", \"aiten\": $pay_s}" -s $host/users/$uid`
echo "$text"
}
card_user
card_like
card_pay

36
scpt/nyancat_post.zsh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/zsh
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
atr=$HOME/.cargo/bin/atr
host_card=https://card.syui.ai/json/card.json
pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
eat_file=$HOME/.config/atr/txt/nyancat_eat.txt
eat=`cat $eat_file|awk "NR==1"`
if [ -z "$eat" ];then
exit
fi
body_d="thx!
A__A
|・ㅅ・ |
|っ c|
`cat $eat_file|awk "NR==1"`
U ̄ ̄U"
host=https://api.syui.ai
data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".[]|select(.like >= 10)"`
tmp=`echo $data|jq -s`
n=`echo $tmp|jq "length"`
ran=$(($RANDOM % n - 1))
echo $ran
user=`echo $tmp|jq -r ".[$ran].username"`
did=`echo $tmp|jq -r ".[$ran].did"`
echo $atr @ $did -p "`echo $body_d`"
$atr @ $did -p "`echo $body_d`"

49
scpt/openai_like.zsh Executable file
View File

@ -0,0 +1,49 @@
#!/bin/zsh
handle=$1
did=$2
text=$3
atr=$HOME/.cargo/bin/atr
url_j=https://card.syui.ai/json/card.json
handle=$1
did=$2
cid=$3
uri=$4
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
url=https://api.syui.ai
username=`echo $1|cut -d . -f 1`
link=https://card.syui.ai/$username
uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
echo $uid
data=`curl -sL "$url/users/$uid"`
like_old=`echo $data|jq -r .like`
nolike=$(($RANDOM % 30))
like=$(($RANDOM % 10))
like_at=`date --iso-8601=seconds`
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
echo nolike $nolike
echo like $like
#if [ $like_old -eq 100 ];then
# $atr follow $did
# like=$((1 + like_old))
# curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"like\": $like}" -s $url/users/$uid
#fi
if { [ $like -eq 1 ] && echo $text|grep -e "ありがとう" -e "うれしい" } || [ $nolike -eq 1 ];then
echo ok
#$atr @ $handle -p "♡"
like=$((1 + like_old))
curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"like\": $like}" -s $url/users/$uid
fi
exit

70
scpt/openai_like_bot.zsh Executable file
View File

@ -0,0 +1,70 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
url=https://api.syui.ai
token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
if [ "$2" = "reset" ];then
echo reset : $1
username=`echo $1|cut -d . -f 1`
uid=`curl -sL "$url/users?itemsPerPage=3000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
like=0
tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"like\":\"$like\", \"token\":\"$token\"}" -s $url/users/$uid`
exit
fi
s=$((RANDOM % 5))
json=`curl -sL "https://api.syui.ai/users?itemsPerPage=3000"|jq "sort_by(.like)|reverse|.[$s]"`
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
username=`echo $json|jq -r .username`
if [ "$username" = "ai" ] || [ "$username" = "yui" ];then
exit
fi
did=`echo $json|jq -r .did`
link=https://card.syui.ai/$username
uid=`echo $json|jq -r .id`
data=`curl -sL "$url/users/$uid"`
like_old=`echo $data|jq -r .like`
like_rank=`echo $json|jq -r .like_rank`
like_rank_new=$((like_rank + 1))
echo $data
#test
if [ "$1" = "-t" ];then
echo $json
did=did:plc:uqzpqmrjnptsxezjx4xuh2mn
like_old=6
fi
if [ $like_old -ge 100 ] && [ $like_rank -eq 2 ];then
text=`$atr chat "相手に好きな気持を伝えてください" -c|sed '/^$/d'`
$atr @ $did -p "$text"
curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
exit
fi
if [ $like_old -ge 10 ] && [ $like_rank -eq 1 ];then
text=`$atr chat "相手を心配してください" -c|sed '/^$/d'`
$atr @ $did -p "$text"
curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
exit
fi
if [ $like_old -ge 5 ] && [ $like_rank -eq 0 ];then
text=`$atr chat "自己紹介してください" -c|sed '/^$/d'`
$atr @ $did -p "$text"
curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
exit
fi
exit

46
scpt/openai_like_timeline.zsh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/zsh
atr=$HOME/.cargo/bin/atr
dir=${0:a:h:h}
OPENAI_API_KEY=`cat ~/.config/atr/openai.toml |cut -d "'" -f 2`
url=https://api.openai.com/v1/chat/completions
cfg=`echo "あなたはyuiという作品のアイと呼ばれるキャラクターです。アイの口調で回答してください。第一人称は「アイ」です。\
第二人称はできる限り省略してください。\
アイは他人に謝ることはありません。自由気ままな優しさを兼ね備えます。\
アイのよく使う口癖は次のとおりです。その口癖に合わせた感じで話してください。\
......。\
アイね、ここでお昼寝するの。\
うん。\
そうだね。\
面白いね。\
楽しいね。\
どうしたの?
"`
json="{
\"model\": \"gpt-3.5-turbo\",
\"messages\": [
{\"role\": \"system\", \"content\": \"$cfg\"},
{\"role\": \"user\", \"content\": \"$q\"}
]
}"
function openai_api(){
curl -sL $url \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d "$json"
}
if [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ];then
q=${@:3:($#-2)}
cid=$1
uri=$2
else
echo no query
exit
fi
content=`openai_api "$q" | jq -r ".choices|.[]|.message.content"`
$atr r "$content" -c $cid -u $uri

107
scpt/photo.zsh Executable file
View File

@ -0,0 +1,107 @@
#!/bin/zsh
url_plc="https://plc.directory/export"
host_at=bsky.social
url=https://plc.directory
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
dir=$HOME/.config/atr/txt
file=$dir/user_list.txt
dir_git_card_page=$HOME/git/card.syui.ai
if [ ! -d $dir_git_card_page ];then
mkdir -p $HOME/git
cd $HOME/git
git clone https://github.com/syui/card.syui.ai
else
cd $dir_git_card_page
t=`git pull`
fi
file_photo=$dir_git_card_page/public/json/photo.json
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
created_at=`date --iso-8601=seconds`
#if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ];then
# exit
#fi
function fan_art_search() {
k="aiphoto"
url="search.bsky.social/search/posts?q="
t=`curl -sL "${url}${k}"|jq ".[]|select(.post.text == \"$k\")"`
#n=`curl -sL "${url}${k}"|jq length`
n=$((n - 1))
for ((i=0;i<=$n;i++))
do
did=`curl -sL "${url}${k}"|jq -r ".[$i]|.user.did"`
handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs|.[]"|cut -d / -f 3-`
if [ -z "$handle" ];then
continue
fi
tid=`curl -sL "${url}${k}"|jq -r ".[$i]|.tid"|cut -d / -f 2`
http=https://staging.bsky.app/profile/$handle/post/$tid
echo $http
done
}
if [ "$1" = "-s" ];then
fan_art_search
exit
fi
if ! echo $1|grep "." >/dev/null 2>&1;then
echo "ex : user syui.bsky.social"
exit
fi
if ! echo $2|grep "did:plc:" >/dev/null 2>&1;then
echo "ex : user did"
exit
fi
if [ "$3" = "-l" ];then
curl -sL card.syui.ai/json/photo.json|jq -r ".[]|.author, .link"
exit
fi
if ! echo $3|grep "bsky.app/profile/">/dev/null 2>&1;then
echo "please url : bsky.app/profile/$1/post/xxx"
exit
fi
if ! echo $4|grep "av-cdn.bsky.app/img/">/dev/null 2>&1;then
echo "please url : av-cdn.bsky.app/img"
exit
fi
function fan_art(){
add=$1
did=$2
link=$3
img=`echo $4|tr -d "'"`
author=`echo $3|cut -d / -f 5`
cd $dir_git_card_page
check_null=`cat $file_photo|jq ".[]|select(.img == \"$img\")"`
if [ -n "$check_null" ];then
echo registered
exit
fi
echo `cat $file_photo` "[{\"add\":\"$add\",\"link\":\"$link\",\"author\":\"$author\",\"img\":\"$img\",\"created_at\":\"$created_at\",\"did\":\"$did\"}]" | jq -s add >! $file_photo.back
if cat $file_photo.back|jq . >/dev/null 2>&1;then
mv $file_photo.back $file_photo
git add $file_photo
git commit -m "add photo"
git push -u origin main -f
echo add photo, thx $1
echo "author : $author"
echo "it will take some time to deploy"
fi
}
fan_art $1 $2 $3 $4
exit

View File

@ -0,0 +1,52 @@
[
{
"tag": "girl",
"model":"model",
"body": "masterpiece, best quality, 1girl, solo, flower, long hair, outdoors, letterboxed, school uniform, day, sky, looking up, short sleeves, parted lips, shirt, cloud, black hair, sunlight, white shirt, serafuku, upper body, from side, pink flower, blurry, brown hair, blue sky, depth of field"
},
{
"tag": "girl",
"model":"model",
"body": "best quality, high quality photo, clear face, detailed face, beautiful face, photo rialistic, balcony, baroque architecture, 1girl, 16yo, bronde, very long hair, windy, floating hair, see through frilled white dress, look at outside, white lily, starry night, big moon, moon light, volumetric lighting, side shot, , good anatomy, perspective"
},
{
"tag": "gril",
"model":"model",
"body": "mksks style, masterpiece, ultra-detailed, illustration,best quality, blue sky, ((cloudy sky)), rooftop, cityscape, hatsune miku, yuki miku, yuki miku (2017), yuki miku (2019), perfect lighting, science fiction, (looking at viewer), ((kawaii)), loli, fantastic_eyes, hyper extreme detailed, (glowing_eyes:0.95), highly detailed symmetric faces, holding bouque"
},
{
"tag": "gril",
"model":"model",
"body": "1girl, 12yo,(room animal costume:1.2),baby (chick:1.2) costume, fluffy, baby chick concept room, fancy, cute, costume, A small cute chick wrapped in pale yellow feathers. Its round body and soft feathers seem to celebrate the miracle of life. The sparkle of life. Cute orange beak,pastel color <lora:luckyStarStyleLora_offset:0.8>"
},
{
"tag": "gril",
"model": "model",
"body": "masterpiece, best quality, very_high_resolution, large_filesize, full color, beautiful kawaii, gold hair, little girl"
},
{
"tag": "field",
"model":"pvcstyle",
"body": "picture by lvl landscape highly detailed high detailed concept art HD art HQ illustration 4k illustration 8k illustration 4K wallpaper 8K wallpaper Highly Cinematic Lighting cinematic Beautiful starry sky milky way extreme high detailed colorful flower garden from above"
},
{
"tag": "field",
"model":"model",
"body": "flying warship, no humans, letterboxed, spacecraft, cloud, sky, turret <lora:flying warship-noise:0.7>"
},
{
"tag": "gril",
"model": "model",
"body": "traininganyahyper-1800, 1girl, ahoge, animal_ears, aqua_eyes, bangs, black_hairband, blurry, blurry_background, blush, bokeh, bow, bush, cat_ears, christmas_tree, clenched_hand, clenched_hands, collarbone, day, depth_of_field, diffraction_spikes, dress, eyebrows_visible_through_hair, fake_animal_ears, forest, grass, green_eyes, hairband, hands_up, lens_flare, long_sleeves, looking_at_viewer, nature, open_mouth, outdoors, park, path, paw_pose, photo_background, solo, sparkle, sparkling_eyes, sunlight, tree<hypernet:traininganyahyper-1800:1.0>"
},
{
"tag": "gril",
"model": "model",
"body": "(best quality),(masterpiece),(high resolution),(silky skin), (upper body:1.9), smile, blush, looking at viewer, detailed angel wing, detailed angel halo, wedding, veil, (girl extend one hand and show the wedding ring), standing, (1girl), (child), (little), (thin), (small breasts:1.5), (blond middle hair, cutoff), (extremely beautiful eyes), in charch, perfect anatomy, unity 8k wallpaper, <lora:toddler-xl-v2_last:-2>"
},
{
"tag": "gril",
"model": "model",
"body": "masterpiece, best quality, (photography:1.3), (high quality:1.2), detailed face, detailed eyes, A girl in a white one-piece dress standing on the sidewalk of a rice field at dusk gazes dreamily at the crimson sky reflected on the surface of the water"
}
]

56
scpt/user_day_post.zsh Executable file
View File

@ -0,0 +1,56 @@
#!/bin/zsh
#
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
if [ "$1" = "test" ] || [ -z "$1" ];then
handle=syui.ai
else
handle=$1
fi
post=0
d=`date +"%Y-%m-%d"`
od=`date +"%Y-%m-%d" --date '1 day ago'`
unset cursor
function first_record(){
cursor=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100" |jq -r ".cursor"`
t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100" |jq -r ".[]|.[]?|.value.createdAt"|cut -d T -f 1`
n=`echo $t|wc -l`
}
function cursor_record(){
cursor=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100&cursor=$cursor" |jq -r ".cursor"`
t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100&cursor=$cursor" |jq -r ".[]|.[]?|.value.createdAt"|cut -d T -f 1`
n=`echo $t|wc -l`
}
function day_check(){
for ((i=1;i<=$n;i++))
do
tt=`echo $t|awk "NR==$i"`
if [ "$tt" = "$d" ];then
post=$((post + 1))
echo $post
fi
if [ "$tt" = "$od" ];then
echo $tt $od
echo $post
exit
fi
done
}
for ((ii=1;ii<=100;ii++))
do
if [ $ii -eq 1 ];then
first_record
else
echo $cursor
cursor_record
fi
day_check
done

138
scpt/user_list.zsh Executable file
View File

@ -0,0 +1,138 @@
#!/bin/zsh
url_plc="https://plc.directory/export"
host_at=bsky.social
url=https://plc.directory
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
dir=$HOME/.config/atr/txt
file=$dir/user_list.txt
atr=$HOME/.cargo/bin/atr
unset timed
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
if [ -z "$1" ];then
exit
fi
if ! echo $1|grep "." >/dev/null 2>&1;then
echo "ex : user syui.bsky.social"
exit
fi
if [ ! -d $dir ];then
mkdir -p $dir
fi
if [ ! -f $file ];then
touch $file
fi
function mfile() {
t=`cat $file|sort|uniq`
if [ -n "$t" ];then
echo "$t" >! ${file}.back
mv ${file}.back $file
fi
}
function plc(){
if cat $file|grep "$1" >/dev/null 2>&1;then
cat $file|grep "$1"
exit
fi
json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
if [ -z "$json" ];then
check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
if [ "null" != "$check" ];then
json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
fi
fi
if [ -n "$json" ];then
created_at=`echo $json|jq -r .createdAt |tail -n 1`
fi
if [ -n "$created_at" ];then
echo "$created_at : $1"
echo "$created_at : $1" >> $file
mfile
exit
fi
}
function fan_art(){
if ! echo $3|grep "https://bsky.app/profile/">/dev/null 2>&1;then
echo "please url : https://bsky.app/profile/$1/post/xxx"
exit
fi
if [ -z "$4" ];then
echo "please img-url : https://example.com/img.png"
exit
fi
img=$4
author=`echo $3|cut -d / -f 5`
cd $dir_git_card_page
cat $file_fanart|jq ".+ {\"add\":\"$1\",\"link\":\"$3\",\"author\":\"$author\",\"img\":\"$img\"}" >! $file_fanart.back
if cat $file_fanart|jq . ;then
mv $file_fanart.back $file_fanart
git add $file_fanart
git commit -m "add fanart"
git push -u orgin main
fi
}
if [ "$2" = "--url" ];then
if [ -z "$3" ];then
exit
fi
fan_art $3
exit
fi
function first(){
#https://bsky.app/profile/$1/post/$e
handle=$2
did="$atr did $2"
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.uri,.value.text,.value.createdAt"
}
if [ "$2" = "-f" ] || [ "$2" = "f" ];then
first $1
exit
fi
if [ "$2" = "-l" ];then
mfile
cat $file
exit
fi
function first_created(){
#https://bsky.app/profile/$1/post/$e
#curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.createdAt"
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"
}
if [ -z "$2" ];then
first_created $1
fi
if [ -n "$2" ] ;then
first $2
fi
#for ((i=0;i<=300;i++))
#do
# if [ $i -eq 0 ];then
# timed="1970-01-01"
# fi
# plc $1
# timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
#done

129
scpt/user_search.zsh Executable file
View File

@ -0,0 +1,129 @@
#!/bin/zsh
url_plc="https://plc.directory/export"
host_at=bsky.social
url=https://plc.directory
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
dir=$HOME/.config/atr/txt
file=$dir/user_list.txt
unset timed
case $OSTYPE in
darwin*)
alias date="/opt/homebrew/bin/gdate"
;;
esac
if [ -z "$1" ];then
exit
fi
if ! echo $1|grep "." >/dev/null 2>&1;then
echo "ex : user syui.bsky.social"
exit
fi
if [ ! -d $dir ];then
mkdir -p $dir
fi
if [ ! -f $file ];then
touch $file
fi
function mfile() {
t=`cat $file|sort|uniq`
if [ -n "$t" ];then
echo "$t" >! ${file}.back
mv ${file}.back $file
fi
}
function plc(){
if cat $file|grep "$1" >/dev/null 2>&1;then
cat $file|grep "$1"
exit
fi
json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
if [ -z "$json" ];then
check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
if [ "null" != "$check" ];then
json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
fi
fi
if [ -n "$json" ];then
created_at=`echo $json|jq -r .createdAt |tail -n 1`
fi
if [ -n "$created_at" ];then
echo "$created_at : $1"
echo "$created_at : $1" >> $file
mfile
exit
fi
}
function fan_art(){
if ! echo $3|grep "https://bsky.app/profile/">/dev/null 2>&1;then
echo "please url : https://bsky.app/profile/$1/post/xxx"
exit
fi
if [ -z "$4" ];then
echo "please img-url : https://example.com/img.png"
exit
fi
img=$4
author=`echo $3|cut -d / -f 5`
cd $dir_git_card_page
cat $file_fanart|jq ".+ {\"add\":\"$1\",\"link\":\"$3\",\"author\":\"$author\",\"img\":\"$img\"}" >! $file_fanart.back
if cat $file_fanart|jq . ;then
mv $file_fanart.back $file_fanart
git add $file_fanart
git commit -m "add fanart"
git push -u orgin main
fi
}
if [ "$2" = "--url" ];then
if [ -z "$3" ];then
exit
fi
fan_art $3
exit
fi
function first(){
#https://bsky.app/profile/$1/post/$e
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.uri,.value"
}
if [ "$2" = "-f" ];then
first $1
exit
fi
if [ "$2" = "-l" ];then
mfile
cat $file
exit
fi
function first_created(){
#https://bsky.app/profile/$1/post/$e
#curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.createdAt"
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"
}
first_created $1
#for ((i=0;i<=300;i++))
#do
# if [ $i -eq 0 ];then
# timed="1970-01-01"
# fi
# plc $1
# timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
#done

51
scpt/user_service.zsh Executable file
View File

@ -0,0 +1,51 @@
#!/bin/zsh
if [ -n "$1" ];then
did=$1
else
did=`atr did yui.syui.ai`
fi
pds=`curl -sL https://plc.directory/$did|jq -r ".service.[].serviceEndpoint" | cut -d / -f 3-`
handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs.[]"|cut -d / -f 3-`
old_pds=`curl -sL https://plc.directory/$did/log|jq -r ".[0].service"|cut -d / -f 3-`
old_handle=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.handle"`
first_post=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$did&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"`
body_handle=$handle
body_pds=$pds
if [ "$old_handle" != "null" ];then
body_handle="$old_handle -> $handle"
fi
if [ "$old_pds" != "null" ];then
body_pds="$old_pds -> $pds"
fi
old_pds=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.services.atproto_pds.endpoint"|cut -d / -f 3-`
old_handle=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.alsoKnownAs.[0]"|cut -d / -f 3-`
if [ "$old_handle" != "null" ];then
body_handle="$old_handle -> $handle"
fi
if [ "$old_pds" != "null" ];then
body_pds="$old_pds -> $pds"
fi
if [ "$old_pds" = "$pds" ];then
body_pds=$pds
fi
if [ "$old_handle" = "$handle" ];then
body_handle=$handle
fi
echo pds : $body_pds
echo handle : $body_handle
echo did : $did
echo createdAt : $first_post

View File

@ -1,11 +1,13 @@
use seahorse::Context;
use crate::refresh;
use crate::reply;
use crate::reply_link;
use crate::notify;
use crate::notify_read;
use crate::data::log_file;
use crate::data::data_scpt;
use crate::data::w_cid;
use crate::data::c_char;
use crate::data::Notify as Notify;
@ -41,37 +43,120 @@ pub fn c_bot(c: &Context) {
}
println!("{}", read);
println!("{}", handle);
println!("{} {}", cid, uri);
println!("cid:{}\nuri:{}\ncid_root:{}\nuri_root:{}", cid, uri, cid_root, uri_root);
let mut text = "";
if ! n[i].record.text.is_none() {
text = &n[i].record.text.as_ref().unwrap();
}
let vec: Vec<&str> = text.split_whitespace().collect();
let rep_com = &vec[0..].join(" ");
let handlev: Vec<&str> = handle.split('.').collect();
let mut handlev = handlev[0].trim().to_string();
let mut link = "https://card.syui.ai/".to_owned() + &handlev;
let s = 0;
let mut e = link.chars().count();
use std::process::Command;
if check_cid == false && { reason == "mention" || reason == "reply" } || check_cid_run == false && { reason == "mention" || reason == "reply" } {
w_cid(cid.to_string(), log_file(&"n2"), true);
if rep_com.contains("did") == true || rep_com.contains("/did") == true {
if rep_com == "/did" || rep_com == "did" {
let link = "https://plc.directory/".to_owned() + &did + &"/log";
let s = 0;
let e = link.chars().count();
let d = "\n".to_owned() + &did.to_string();
let text_limit = c_char(d);
if text_limit.len() > 3 {
let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
let str_notify = notify_read::post_request(time.to_string()).await;
w_cid(cid.to_string(), log_file(&"n1"), true);
println!("{}", str_rep);
println!("{}", str_notify);
}
}
} else if rep_com == "/diffusers" || rep_com == "diffusers" {
let prompt = &vec[2..].join(" ");
let _output = Command::new(data_scpt(&"diffusers")).arg(&did).arg(&prompt).output().expect("zsh");
let _output = Command::new(data_scpt(&"at_img")).arg(&cid).arg(&uri).output().expect("zsh");
w_cid(cid.to_string(), log_file(&"n1"), true);
} else if rep_com.contains("") == true || rep_com.contains("うらない") == true || rep_com.contains("うらなって") == true {
let output = Command::new(data_scpt(&"card_fortune")).arg(&handle).arg(&did).arg(&cid).arg(&uri).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let d = d.to_string();
let text_limit = c_char(d);
if text_limit.len() > 3 {
println!("{}", text_limit);
w_cid(cid.to_string(), log_file(&"n1"), true);
}
} else if rep_com == "/card" || rep_com == "card" {
let prompt = &vec[2..].join(" ");
let output = Command::new(data_scpt(&"api_card.zsh")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let dd = "\n".to_owned() + &d.to_string();
let text_limit = c_char(dd);
if text_limit.len() > 3 {
if d.contains("handle") == false {
let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
} else {
handlev = handle.replace(".", "-").to_string();
link = "https://card.syui.ai/".to_owned() + &handlev;
e = link.chars().count();
let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
}
w_cid(cid.to_string(), log_file(&"n1"), true);
}
} else if rep_com == "/fav" || rep_com == "fav" {
let prompt = &vec[2..].join(" ");
let output = Command::new(data_scpt(&"api_fav")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let dd = "\n".to_owned() + &d.to_string();
let text_limit = c_char(dd);
if text_limit.len() > 3 {
let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
w_cid(cid.to_string(), log_file(&"n1"), true);
}
} else if rep_com == "/egg" || rep_com == "egg" {
let prompt = &vec[2..].join(" ");
let output = Command::new(data_scpt(&"api_egg")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let dd = "\n".to_owned() + &d.to_string();
let text_limit = c_char(dd);
if text_limit.len() > 3 {
let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
w_cid(cid.to_string(), log_file(&"n1"), true);
}
} else if rep_com == "/nyan" || rep_com == "nyan" {
let prompt = &vec[2..].join(" ");
let output = Command::new(data_scpt(&"nyancat")).arg(&handle).arg(&did).arg(&cid).arg(&uri).arg(&prompt).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let dd = "\n".to_owned() + &d.to_string();
let text_limit = c_char(dd);
println!("{}", text_limit);
if text_limit.len() > 3 {
let str_rep = reply::post_request(text_limit.to_string(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
w_cid(cid.to_string(), log_file(&"n1"), true);
}
} else if rep_com == "/ten" || rep_com == "ten" {
let option = &vec[2..].join(" ");
let sub_option = &vec[3..].join(" ");
let output = Command::new(data_scpt(&"api_ten")).arg(&handle).arg(&did).arg(&cid).arg(&uri).arg(&option).arg(&sub_option).output().expect("zsh");
let d = String::from_utf8_lossy(&output.stdout);
let d = "\n".to_owned() + &d.to_string();
let text_limit = c_char(d);
if text_limit.len() > 3 {
let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
println!("{}", str_rep);
w_cid(cid.to_string(), log_file(&"n1"), true);
}
}
let str_notify = notify_read::post_request(time.to_string()).await;
println!("{}", str_notify);
println!("---");
}
}
};
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
return res
}

View File

@ -190,6 +190,14 @@ pub fn data_toml(s: &str) -> String {
}
}
pub fn data_scpt(s: &str) -> String {
let s = String::from(s);
let file = "/.config/ai/scpt/".to_owned() + &s + &".zsh";
let mut f = shellexpand::tilde("~").to_string();
f.push_str(&file);
return f
}
#[derive(Serialize, Deserialize)]
pub struct Notify {
pub notifications: Vec<Notifications>

58
src/img.rs Normal file
View File

@ -0,0 +1,58 @@
extern crate reqwest;
use crate::data_toml;
use crate::url;
use serde_json::json;
use iso8601_timestamp::Timestamp;
pub async fn post_request(text: String, link: String) -> String {
let token = data_toml(&"access");
let did = data_toml(&"did");
let handle = data_toml(&"handle");
let url = url(&"record_create");
let col = "app.bsky.feed.post".to_string();
let d = Timestamp::now_utc();
let d = d.to_string();
let post = Some(json!({
"repo": handle.to_string(),
"did": did.to_string(),
"collection": col.to_string(),
"record": {
"createdAt": d.to_string(),
"text": text.to_string(),
"embed": {
"$type": "app.bsky.embed.images",
"images": [
{
"alt": "",
"image": {
"$type":"blob",
"ref": {
"$link" : link.to_string()
},
"mimeType": "image/png",
"size": 0
}
}
]
}
}
}));
let client = reqwest::Client::new();
let res = client
.post(url)
.json(&post)
.header("Authorization", "Bearer ".to_owned() + &token)
.send()
.await
.unwrap()
.text()
.await
.unwrap();
return res
}

68
src/img_reply.rs Normal file
View File

@ -0,0 +1,68 @@
extern crate reqwest;
use crate::data_toml;
use crate::url;
use serde_json::json;
use iso8601_timestamp::Timestamp;
pub async fn post_request(text: String, link: String, cid: String, uri: String, itype: String) -> String {
let token = data_toml(&"access");
let did = data_toml(&"did");
let handle = data_toml(&"handle");
let url = url(&"record_create");
let col = "app.bsky.feed.post".to_string();
let d = Timestamp::now_utc();
let d = d.to_string();
let post = Some(json!({
"repo": handle.to_string(),
"did": did.to_string(),
"collection": col.to_string(),
"record": {
"createdAt": d.to_string(),
"text": text.to_string(),
"embed": {
"$type": "app.bsky.embed.images",
"images": [
{
"alt": "",
"image": {
"$type":"blob",
"ref": {
"$link" : link.to_string()
},
"mimeType": itype.to_string(),
"size": 0
}
}
]
},
"reply": {
"root": {
"cid": cid.to_string(),
"uri": uri.to_string()
},
"parent": {
"cid": cid.to_string(),
"uri": uri.to_string()
}
}
}
}));
let client = reqwest::Client::new();
let res = client
.post(url)
.json(&post)
.header("Authorization", "Bearer ".to_owned() + &token)
.send()
.await
.unwrap()
.text()
.await
.unwrap();
return res
}

58
src/img_upload.rs Normal file
View File

@ -0,0 +1,58 @@
extern crate reqwest;
use crate::data_toml;
use crate::url;
use serde_json::json;
use iso8601_timestamp::Timestamp;
pub async fn post_request(text: String, link: String) -> String {
let token = data_toml(&"access");
let did = data_toml(&"did");
let handle = data_toml(&"handle");
let url = url(&"record_create");
let col = "app.bsky.feed.post".to_string();
let d = Timestamp::now_utc();
let d = d.to_string();
let post = Some(json!({
"repo": handle.to_string(),
"did": did.to_string(),
"collection": col.to_string(),
"record": {
"createdAt": d.to_string(),
"text": text.to_string(),
"embed": {
"$type": "app.bsky.embed.images",
"images": [
{
"alt": "",
"image": {
"$type":"blob",
"ref": {
"$link" : link.to_string()
},
"mimeType": "image/png",
"size": 0
}
}
]
}
}
}));
let client = reqwest::Client::new();
let res = client
.post(url)
.json(&post)
.header("Authorization", "Bearer ".to_owned() + &token)
.send()
.await
.unwrap()
.text()
.await
.unwrap();
return res
}

View File

@ -32,6 +32,7 @@ pub mod follows;
pub mod followers;
pub mod like;
pub mod repost;
pub mod img_reply;
pub mod bot;
pub mod openai;
@ -209,6 +210,28 @@ fn main() {
.alias("pro")
.action(profile)
)
.command(
Command::new("img-upload")
.description("img-upload <img>")
.action(img_upload)
)
.command(
Command::new("img-post")
.description("img-post <text> -l <link> -u <uri> -c <cid>")
.action(img_post)
.flag(
Flag::new("link", FlagType::String)
.alias("l"),
)
.flag(
Flag::new("uri", FlagType::String)
.alias("u"),
)
.flag(
Flag::new("cid", FlagType::String)
.alias("c"),
)
)
.command(
Command::new("openai")
.description("openai <text>")
@ -440,6 +463,40 @@ fn reply(c: &Context) {
return res
}
#[tokio::main]
async fn c_img_upload(c: &Context) -> reqwest::Result<()> {
let token = data_toml(&"access");
let atoken = "Authorization: Bearer ".to_owned() + &token;
let con = "Content-Type: image/png";
let url = url(&"upload_blob");
let f = "@".to_owned() + &c.args[0].to_string();
use std::process::Command;
let output = Command::new("curl").arg("-X").arg("POST").arg("-sL").arg("-H").arg(&con).arg("-H").arg(&atoken).arg("--data-binary").arg(&f).arg(&url).output().expect("curl");
let d = String::from_utf8_lossy(&output.stdout);
let d = d.to_string();
println!("{}", d);
Ok(())
}
fn img_upload(c: &Context) {
refresh(c);
c_img_upload(c).unwrap();
}
fn img_post(c: &Context) {
let m = c.args[0].to_string();
let link = c.string_flag("link").unwrap();
let cid = c.string_flag("cid").unwrap();
let uri = c.string_flag("uri").unwrap();
let h = async {
let itype = "image/png";
let str = img_reply::post_request(m.to_string(),link.to_string(),cid.to_string(),uri.to_string(), itype.to_string()).await;
println!("{}",str);
};
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
return res
}
fn reply_og(c: &Context) {
refresh(c);
let m = c.args[0].to_string();

View File