Compare commits
2 Commits
main
...
51c41897e2
Author | SHA1 | Date | |
---|---|---|---|
51c41897e2
|
|||
807f7814c7
|
Submodule .config/ai/scpt deleted from 7a4d642e41
1623
.config/ai/scpt/api_card.zsh
Executable file
1623
.config/ai/scpt/api_card.zsh
Executable file
File diff suppressed because it is too large
Load Diff
46
.config/ai/scpt/api_card_raid_win.zsh
Executable file
46
.config/ai/scpt/api_card_raid_win.zsh
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
url=https://api.syui.ai
|
||||||
|
token=`cat $HOME/.config/ai/api_card.json|jq -r .token`
|
||||||
|
pass=`cat $HOME/.config/ai/api_card.json|jq -r .password`
|
||||||
|
f_reid_user=$HOME/.config/ai/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
.config/ai/scpt/api_chara.zsh
Executable file
215
.config/ai/scpt/api_chara.zsh
Executable 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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/api_egg.zsh
Executable file
156
.config/ai/scpt/api_egg.zsh
Executable 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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/api_fav.zsh
Executable file
161
.config/ai/scpt/api_fav.zsh
Executable 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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/api_gift.zsh
Executable file
278
.config/ai/scpt/api_gift.zsh
Executable 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
.config/ai/scpt/api_ten.zsh
Executable file
1345
.config/ai/scpt/api_ten.zsh
Executable file
File diff suppressed because it is too large
Load Diff
183
.config/ai/scpt/api_ten_auto.zsh
Executable file
183
.config/ai/scpt/api_ten_auto.zsh
Executable file
@@ -0,0 +1,183 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
case $OSTYPE in
|
||||||
|
darwin*)
|
||||||
|
alias date="/opt/homebrew/bin/gdate"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
card_pay=$HOME/.config/ai/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/ai/txt/tmp_notify_cid.txt
|
||||||
|
f_cfg=$HOME/.config/ai/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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/api_ten_su_reset.zsh
Executable file
31
.config/ai/scpt/api_ten_su_reset.zsh
Executable 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
.config/ai/scpt/arch.zsh
Executable file
79
.config/ai/scpt/arch.zsh
Executable file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
home=/root
|
||||||
|
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
.config/ai/scpt/at_img.zsh
Executable file
21
.config/ai/scpt/at_img.zsh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
dir=${0:a:h}
|
||||||
|
f=$HOME/.config/ai/scpt/png/t.png
|
||||||
|
f_sleep=$HOME/.config/ai/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
.config/ai/scpt/at_search.zsh
Executable file
21
.config/ai/scpt/at_search.zsh
Executable 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
.config/ai/scpt/bluesky.zsh
Executable file
24
.config/ai/scpt/bluesky.zsh
Executable 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
.config/ai/scpt/bot_card.zsh
Executable file
39
.config/ai/scpt/bot_card.zsh
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
host_at=bsky.social
|
||||||
|
url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
|
||||||
|
scpt=$HOME/.config/ai/scpt/api_card.zsh
|
||||||
|
|
||||||
|
handle=skychan.social
|
||||||
|
did=did:plc:7hgow77uky7lgbinwyvbzhar
|
||||||
|
f=$HOME/.config/ai/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
.config/ai/scpt/bot_kawaii.zsh
Executable file
60
.config/ai/scpt/bot_kawaii.zsh
Executable file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
d=$HOME/.config/ai/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
.config/ai/scpt/bot_list.zsh
Executable file
79
.config/ai/scpt/bot_list.zsh
Executable 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
.config/ai/scpt/bsky_token.zsh
Executable file
29
.config/ai/scpt/bsky_token.zsh
Executable 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
.config/ai/scpt/card_box.zsh
Executable file
40
.config/ai/scpt/card_box.zsh
Executable 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/ai/txt/tmp_notify_cid.txt
|
||||||
|
|
||||||
|
handle=$1
|
||||||
|
did=$2
|
||||||
|
cid=$3
|
||||||
|
uri=$4
|
||||||
|
|
||||||
|
if [ ! -d $HOME/.config/ai/txt ];then
|
||||||
|
mkdir -p $HOME/.config/ai/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
.config/ai/scpt/card_fortune.zsh
Executable file
161
.config/ai/scpt/card_fortune.zsh
Executable file
@@ -0,0 +1,161 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
atr=$HOME/.cargo/bin/atr
|
||||||
|
url_j=https://card.syui.ai/json/card.json
|
||||||
|
tcid=$HOME/.config/ai/txt/tmp_notify_cid.txt
|
||||||
|
|
||||||
|
handle=$1
|
||||||
|
did=$2
|
||||||
|
cid=$3
|
||||||
|
uri=$4
|
||||||
|
|
||||||
|
if [ ! -d $HOME/.config/ai/txt ];then
|
||||||
|
mkdir -p $HOME/.config/ai/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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/card_fortune_en.zsh
Executable file
147
.config/ai/scpt/card_fortune_en.zsh
Executable file
@@ -0,0 +1,147 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
atr=$HOME/.cargo/bin/atr
|
||||||
|
url_j=https://card.syui.ai/json/card.json
|
||||||
|
tcid=$HOME/.config/ai/txt/tmp_notify_cid.txt
|
||||||
|
|
||||||
|
handle=$1
|
||||||
|
did=$2
|
||||||
|
cid=$3
|
||||||
|
uri=$4
|
||||||
|
|
||||||
|
if [ ! -d $HOME/.config/ai/txt ];then
|
||||||
|
mkdir -p $HOME/.config/ai/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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/card_pay.zsh
Executable file
154
.config/ai/scpt/card_pay.zsh
Executable 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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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
.config/ai/scpt/card_tarot.zsh
Executable file
37
.config/ai/scpt/card_tarot.zsh
Executable 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
.config/ai/scpt/card_tarot_en.zsh
Executable file
37
.config/ai/scpt/card_tarot_en.zsh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
atr=$HOME/.cargo/bin/atr
|
||||||
|
url_j=https://card.syui.ai/json/card.json
|
||||||
|
tcid=$HOME/.config/ai/txt/tmp_notify_cid.txt
|
||||||
|
|
||||||
|
handle=$1
|
||||||
|
did=$2
|
||||||
|
cid=$3
|
||||||
|
uri=$4
|
||||||
|
|
||||||
|
if [ ! -d $HOME/.config/ai/txt ];then
|
||||||
|
mkdir -p $HOME/.config/ai/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
.config/ai/scpt/diffusers.zsh
Executable file
108
.config/ai/scpt/diffusers.zsh
Executable 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
.config/ai/scpt/dig.zsh
Executable file
7
.config/ai/scpt/dig.zsh
Executable 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
.config/ai/scpt/fan_art.zsh
Executable file
145
.config/ai/scpt/fan_art.zsh
Executable 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
.config/ai/scpt/follow_all.zsh
Executable file
75
.config/ai/scpt/follow_all.zsh
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
d=$HOME/.config/ai/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
.config/ai/scpt/full_moon.j
Normal file
126
.config/ai/scpt/full_moon.j
Normal 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
.config/ai/scpt/invite.zsh
Executable file
14
.config/ai/scpt/invite.zsh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
admin_password=`cat $HOME/.config/ai/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
.config/ai/scpt/like_reply.zsh
Executable file
40
.config/ai/scpt/like_reply.zsh
Executable 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
.config/ai/scpt/mastodon.zsh
Executable file
390
.config/ai/scpt/mastodon.zsh
Executable 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/ai/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/ai/api_card.json|jq -r .password`
|
||||||
|
token=`cat $HOME/.config/ai/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/ai/txt/card_server.txt
|
||||||
|
f_server_user_at=$HOME/.config/ai/txt/card_server_user_at.txt
|
||||||
|
f_server_user_ap=$HOME/.config/ai/txt/card_server_user_ap.txt
|
||||||
|
f_server_ap=$HOME/.config/ai/txt/card_server_ap.txt
|
||||||
|
f_server_at=$HOME/.config/ai/txt/card_server_at.txt
|
||||||
|
f_server_start_time=$HOME/.config/ai/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/'/'/g" -e 's/"/"/g'`
|
||||||
|
else
|
||||||
|
text=`echo ${text}|sed -e 's/<[^>]*>//g'|cut -d " " -f 2-|tr -d '"'|sed -e "s/'/'/g" -e 's/"/"/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
.config/ai/scpt/nyancat.zsh
Executable file
107
.config/ai/scpt/nyancat.zsh
Executable 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
.config/ai/scpt/nyancat_post.zsh
Executable file
36
.config/ai/scpt/nyancat_post.zsh
Executable 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
.config/ai/scpt/openai_like.zsh
Executable file
49
.config/ai/scpt/openai_like.zsh
Executable 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/ai/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
.config/ai/scpt/openai_like_bot.zsh
Executable file
70
.config/ai/scpt/openai_like_bot.zsh
Executable 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
.config/ai/scpt/openai_like_timeline.zsh
Executable file
46
.config/ai/scpt/openai_like_timeline.zsh
Executable 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
.config/ai/scpt/photo.zsh
Executable file
107
.config/ai/scpt/photo.zsh
Executable 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/ai/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
|
52
.config/ai/scpt/stable_diffusion_prompt.j
Normal file
52
.config/ai/scpt/stable_diffusion_prompt.j
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
20
.config/ai/scpt/t.zsh
Executable file
20
.config/ai/scpt/t.zsh
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
f=`grep -R '$HOME/.config/atr' . |cut -d : -f 1|sort|uniq|grep -v t.zsh`
|
||||||
|
echo $f
|
||||||
|
n=`echo $f|wc -l`
|
||||||
|
for ((i=1;i<=$n;i++))
|
||||||
|
do
|
||||||
|
ff=`echo $f|awk "NR==$i"`
|
||||||
|
echo $i
|
||||||
|
echo $ff
|
||||||
|
sed 's#$HOME/.config/atr#$HOME/.config/ai#g' $ff|grep '$HOME/.config'
|
||||||
|
case $OSTYPE in
|
||||||
|
linux*)
|
||||||
|
sed -i 's#$HOME/.config/atr#$HOME/.config/ai#g' $ff
|
||||||
|
;;
|
||||||
|
darwin*)
|
||||||
|
sed -i "" 's#$HOME/.config/atr#$HOME/.config/ai#g' $ff
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
56
.config/ai/scpt/user_day_post.zsh
Executable file
56
.config/ai/scpt/user_day_post.zsh
Executable 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
.config/ai/scpt/user_list.zsh
Executable file
138
.config/ai/scpt/user_list.zsh
Executable 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
.config/ai/scpt/user_search.zsh
Executable file
129
.config/ai/scpt/user_search.zsh
Executable 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/ai/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
.config/ai/scpt/user_service.zsh
Executable file
51
.config/ai/scpt/user_service.zsh
Executable 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
|
@@ -1,18 +0,0 @@
|
|||||||
name: Gitea Actions Demo
|
|
||||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
|
||||||
on: [push]
|
|
||||||
jobs:
|
|
||||||
Explore-Gitea-Actions:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
|
|
||||||
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
|
||||||
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
|
|
||||||
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
|
||||||
- name: List files in the repository
|
|
||||||
run: |
|
|
||||||
ls ${{ gitea.workspace }}
|
|
||||||
- run: echo "🍏 This job's status is ${{ gitea.status }}."
|
|
12
.gitignore
vendored
12
.gitignore
vendored
@@ -1,19 +1,9 @@
|
|||||||
Cargo.lock
|
Cargo.lock
|
||||||
target
|
target
|
||||||
#*.json
|
*.json
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
**.DS_Store
|
**.DS_Store
|
||||||
scpt/json/
|
scpt/json/
|
||||||
.config/ai/*.toml
|
.config/ai/*.toml
|
||||||
.config/ai/*.json
|
.config/ai/*.json
|
||||||
.config/ai/txt
|
.config/ai/txt
|
||||||
.config/ai/png
|
|
||||||
.ssh/*.key
|
|
||||||
.ssh/*.pub
|
|
||||||
.ssh/*config
|
|
||||||
.env
|
|
||||||
|
|
||||||
pnpm-lock.yaml
|
|
||||||
**Cargo.lock
|
|
||||||
*/target/
|
|
||||||
*/**/*.rs.bk
|
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
|||||||
[submodule "bot_scpt"]
|
|
||||||
path = .config/ai/scpt
|
|
||||||
url = git@git.syui.ai:ai/bot_scpt.git
|
|
@@ -1,9 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ai"
|
name = "ai"
|
||||||
authors = ["syui"]
|
version = "0.0.1"
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "latest@2024-08-18"
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
seahorse = "*"
|
seahorse = "*"
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
FROM syui/aios
|
FROM syui/aios
|
||||||
|
|
||||||
|
USER root
|
||||||
|
ADD .config /root/.config
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
ADD ./test/entrypoint.sh .
|
|
||||||
RUN chmod +x /root/entrypoint.sh
|
|
||||||
|
|
||||||
ENTRYPOINT ["/root/entrypoint.sh"]
|
ADD ./test/entrypoint.sh /
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
82
README.md
82
README.md
@@ -3,18 +3,14 @@
|
|||||||
<img src="./icon/avatar.png" width="100">
|
<img src="./icon/avatar.png" width="100">
|
||||||
|
|
||||||
- name : ai bot
|
- name : ai bot
|
||||||
- base : [ai os](https://git.syui.ai/ai/os)
|
- base : [rust](https://www.rust-lang.org)
|
||||||
- host : [yui.syui.ai](https://bsky.app/profile/yui.syui.ai), [ai.syu.is](https://web.syu.is/profile/ai.syu.is)
|
- host : [yui.syui.ai](https://bsky.app/profile/yui.syui.ai), [ai.syu.is](https://web.syu.is/profile/ai.syu.is)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ ai
|
$ ai
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh
|
### logo
|
||||||
$ docker run -it syui/aios ai
|
|
||||||
```
|
|
||||||
|
|
||||||
### build
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ cargo build
|
$ cargo build
|
||||||
@@ -61,21 +57,17 @@ $ ai n | jq .
|
|||||||
$ ai bot
|
$ ai bot
|
||||||
```
|
```
|
||||||
|
|
||||||
|command|sub|type|link|auth|
|
|command|sub|type|body|
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|
|
||||||
|/did||mention, reply| [plc.directory](https://plc.directory)/$did/log |user|
|
|@yui.syui.ai did||mention, reply| [plc.directory](https://plc.directory)/$did/log |
|
||||||
|/card|r, s, b|mention, reply| [card.syui.ai](https://card.syui.ai) |user|
|
|@yui.syui.ai card|r, s, b|mention, reply| https://card.syui.ai |
|
||||||
|/ten|start, close, d, p|mention, reply| [card.syui.ai](https://card.syui.ai) |user|
|
|@yui.syui.ai ten|start, d, p|mention, reply| https://card.syui.ai |
|
||||||
|/fav|{cid}|mention, reply| [card.syui.ai](https://card.syui.ai) |user|
|
|@yui.syui.ai fav|{cid}|mention, reply| https://card.syui.ai |
|
||||||
|/egg|{password}|mention, reply| [card.syui.ai](https://card.syui.ai) |user|
|
|@yui.syui.ai egg|{password}|mention, reply| https://card.syui.ai |
|
||||||
|/nyan|🍬|mention, reply| [yui.syui.ai](https://yui.syui.ai) |user|
|
|@yui.syui.ai 占い||mention, reply| https://yui.syui.ai |
|
||||||
|/diffusers|{keyword}|mention, reply| [huggingface.co/diffusers](https://huggingface.co/docs/diffusers/index) |user|
|
|@yui.syui.ai nyan|🍰|mention, reply| https://yui.syui.ai |
|
||||||
|/sh|{command}|mention, reply| [archlinux.org](https://wiki.archlinux.org/title/Systemd-nspawn) |admin|
|
|@yui.syui.ai diffusers|{keyword}|mention, reply| [diffusers](https://huggingface.co/docs/diffusers/index) |
|
||||||
|/占い||mention, reply| [yui.syui.ai](https://yui.syui.ai) |user|
|
|@yui.syui.ai sh(admin)|{command}|mention, reply| [archlinux](https://wiki.archlinux.org/title/Systemd-nspawn) |
|
||||||
|
|
||||||
```sh
|
|
||||||
@yui.syui.ai /did
|
|
||||||
```
|
|
||||||
|
|
||||||
### test
|
### test
|
||||||
|
|
||||||
@@ -94,51 +86,13 @@ $ cargo make build
|
|||||||
|
|
||||||
### docker
|
### docker
|
||||||
|
|
||||||
> .env
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
HANDLE=ai.syu.is
|
$ docker run -it syui/aios ai
|
||||||
PASSWORD=xxx
|
$ docker run -it -d syui/aios zsh -c "ai login <handle> -p <password> && ai bot"
|
||||||
HOST=syu.is
|
|
||||||
ADMIN=syui.syu.is
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ docker compose build
|
$ cp -rf ~/.config/ai ./.config/
|
||||||
$ docker compose up -d
|
|
||||||
|
$ docker compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
## pds:card
|
|
||||||
|
|
||||||
- https://atproto.com/ja/guides/lexicon
|
|
||||||
- https://at.syu.is/at/did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.syui.card/3lagpwihqxi2v
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# oauth(button)
|
|
||||||
[yui]ai.syui.card.verify -> [user]ai.syui.card
|
|
||||||
|
|
||||||
[yui]
|
|
||||||
$ ./target/debug/ai card-verify -i 0 -p 0 -r 0 -h syui.ai -d did:plc:uqzpqmrjnptsxezjx4xuh2mn
|
|
||||||
{"uri":"at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.card.verify/3lagpvhppmd2q"}
|
|
||||||
|
|
||||||
[user]
|
|
||||||
$ ./target/debug/ai card -i 0 -p 0 -r 0 -v at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.card.verify/3lagpvhppmd2q
|
|
||||||
```
|
|
||||||
|
|
||||||
## pds:game
|
|
||||||
|
|
||||||
- https://atproto.com/ja/specs/record-key
|
|
||||||
- https://at.syu.is/at/did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.syui.game/self
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# oauth(play)
|
|
||||||
[yui]ai.syui.game.user -> [user]ai.syui.game
|
|
||||||
|
|
||||||
[account]
|
|
||||||
# https://at.syu.is/at/did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui
|
|
||||||
## [rkey]
|
|
||||||
1. echo $handle|cut -d . -f 1
|
|
||||||
2. $handle
|
|
||||||
3. tid
|
|
||||||
```
|
|
||||||
|
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
FEEDGEN_PORT=3000
|
|
||||||
FEEDGEN_LISTENHOST="0.0.0.0"
|
|
||||||
FEEDGEN_SQLITE_LOCATION="/data/db.sqlite"
|
|
||||||
FEEDGEN_SUBSCRIPTION_ENDPOINT="wss://bgs.syu.is"
|
|
||||||
FEEDGEN_PUBLISHER_DID="did:web:feed.syu.is"
|
|
||||||
FEEDGEN_HOSTNAME="feed.syu.is"
|
|
||||||
|
|
||||||
FEEDGEN_SUBSCRIPTION_RECONNECT_DELAY=3000
|
|
||||||
FEEDGEN_PUBLISHER_DID=did:plc:4hqjfn7m6n5hno3doamuhgef
|
|
||||||
FEEDGEN_SUBSCRIPTION_ENDPOINT="wss://bsky.network"
|
|
@@ -1,26 +0,0 @@
|
|||||||
# custom feed
|
|
||||||
|
|
||||||
- at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd
|
|
||||||
- [bsky.app](https://bsky.app/profile/did:plc:4hqjfn7m6n5hno3doamuhgef/feed/cmd)
|
|
||||||
- [app.bsky.feed.getFeedSkeleton](https://feed.syu.is/xrpc/app.bsky.feed.getFeedSkeleton?feed=at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
did=did:plc:4hqjfn7m6n5hno3doamuhgef
|
|
||||||
col=app.bsky.feed.generator
|
|
||||||
cid=cmd
|
|
||||||
uri=at://$did/$col/$cid
|
|
||||||
|
|
||||||
echo $uri
|
|
||||||
```
|
|
||||||
|
|
||||||
## bsky-feed
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ git clone https://github.com/bluesky-social/feed-generator
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose build feed-generator
|
|
||||||
docker build -t publish_feed -f Dockerfile.feed .
|
|
||||||
docker run publish_feed
|
|
||||||
```
|
|
@@ -1,43 +0,0 @@
|
|||||||
import { InvalidRequestError } from '@atproto/xrpc-server'
|
|
||||||
import { QueryParams } from '../lexicon/types/app/bsky/feed/getFeedSkeleton'
|
|
||||||
import { AppContext } from '../config'
|
|
||||||
|
|
||||||
// max 15 chars
|
|
||||||
export const shortname = 'cmd'
|
|
||||||
|
|
||||||
export const handler = async (ctx: AppContext, params: QueryParams) => {
|
|
||||||
let builder = ctx.db
|
|
||||||
.selectFrom('post')
|
|
||||||
.selectAll()
|
|
||||||
.orderBy('indexedAt', 'desc')
|
|
||||||
.orderBy('cid', 'desc')
|
|
||||||
.limit(params.limit)
|
|
||||||
|
|
||||||
if (params.cursor) {
|
|
||||||
const [indexedAt, cid] = params.cursor.split('::')
|
|
||||||
if (!indexedAt || !cid) {
|
|
||||||
throw new InvalidRequestError('malformed cursor')
|
|
||||||
}
|
|
||||||
const timeStr = new Date(parseInt(indexedAt, 10)).toISOString()
|
|
||||||
builder = builder
|
|
||||||
.where('post.indexedAt', '<', timeStr)
|
|
||||||
.orWhere((qb) => qb.where('post.indexedAt', '=', timeStr))
|
|
||||||
.where('post.cid', '<', cid)
|
|
||||||
}
|
|
||||||
const res = await builder.execute()
|
|
||||||
|
|
||||||
const feed = res.map((row) => ({
|
|
||||||
post: row.uri,
|
|
||||||
}))
|
|
||||||
|
|
||||||
let cursor: string | undefined
|
|
||||||
const last = res.at(-1)
|
|
||||||
if (last) {
|
|
||||||
cursor = `${new Date(last.indexedAt).getTime()}::${last.cid}`
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
cursor,
|
|
||||||
feed,
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,14 +0,0 @@
|
|||||||
import { AppContext } from '../config'
|
|
||||||
import {
|
|
||||||
QueryParams,
|
|
||||||
OutputSchema as AlgoOutput,
|
|
||||||
} from '../lexicon/types/app/bsky/feed/getFeedSkeleton'
|
|
||||||
import * as cmd from './cmd'
|
|
||||||
|
|
||||||
type AlgoHandler = (ctx: AppContext, params: QueryParams) => Promise<AlgoOutput>
|
|
||||||
|
|
||||||
const algos: Record<string, AlgoHandler> = {
|
|
||||||
[cmd.shortname]: cmd.handler,
|
|
||||||
}
|
|
||||||
|
|
||||||
export default algos
|
|
@@ -1,50 +0,0 @@
|
|||||||
import {
|
|
||||||
OutputSchema as RepoEvent,
|
|
||||||
isCommit,
|
|
||||||
} from './lexicon/types/com/atproto/sync/subscribeRepos'
|
|
||||||
import { FirehoseSubscriptionBase, getOpsByType } from './util/subscription'
|
|
||||||
|
|
||||||
export class FirehoseSubscription extends FirehoseSubscriptionBase {
|
|
||||||
async handleEvent(evt: RepoEvent) {
|
|
||||||
if (!isCommit(evt)) return
|
|
||||||
const ops = await getOpsByType(evt)
|
|
||||||
|
|
||||||
// This logs the text of every post off the firehose.
|
|
||||||
// Just for fun :)
|
|
||||||
// Delete before actually using
|
|
||||||
for (const post of ops.posts.creates) {
|
|
||||||
console.log(post.record.text)
|
|
||||||
}
|
|
||||||
|
|
||||||
const postsToDelete = ops.posts.deletes.map((del) => del.uri)
|
|
||||||
const postsToCreate = ops.posts.creates
|
|
||||||
.filter((create) => {
|
|
||||||
return create.record.text.match('^/[a-z]') || create.record.text.match('^@ai ') || create.record.text.match('/ai ');
|
|
||||||
//return create.record.text.toLowerCase().includes('alf')
|
|
||||||
})
|
|
||||||
.map((create) => {
|
|
||||||
// map alf-related posts to a db row
|
|
||||||
return {
|
|
||||||
uri: create.uri,
|
|
||||||
cid: create.cid,
|
|
||||||
replyParent: create.record?.reply?.parent.uri ?? null,
|
|
||||||
replyRoot: create.record?.reply?.root.uri ?? null,
|
|
||||||
indexedAt: new Date().toISOString(),
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (postsToDelete.length > 0) {
|
|
||||||
await this.db
|
|
||||||
.deleteFrom('post')
|
|
||||||
.where('uri', 'in', postsToDelete)
|
|
||||||
.execute()
|
|
||||||
}
|
|
||||||
if (postsToCreate.length > 0) {
|
|
||||||
await this.db
|
|
||||||
.insertInto('post')
|
|
||||||
.values(postsToCreate)
|
|
||||||
.onConflict((oc) => oc.doNothing())
|
|
||||||
.execute()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,11 +1,7 @@
|
|||||||
services:
|
services:
|
||||||
aios:
|
aios:
|
||||||
#image: syui/aios
|
image: syui/aios
|
||||||
#command: ai bot -a syui.syu.is
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
restart: always
|
restart: always
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./.config:/root/.config
|
- ./.config:/root/.config
|
||||||
|
command: zsh -c "ai bot"
|
||||||
|
@@ -1,38 +0,0 @@
|
|||||||
## curl
|
|
||||||
|
|
||||||
no-authorization
|
|
||||||
|
|
||||||
https://docs.bsky.app/docs/api/com-atproto-repo-describe-repo
|
|
||||||
|
|
||||||
```sh
|
|
||||||
handle=yui.syui.ai
|
|
||||||
host=bsky.social
|
|
||||||
api=$host/xrpc
|
|
||||||
plc=plc.directory
|
|
||||||
url=$api/com.atproto.repo.describeRepo
|
|
||||||
|
|
||||||
curl -sL ${host}/xrpc/_health
|
|
||||||
|
|
||||||
d=`curl -sL "${url}?repo=$handle"`
|
|
||||||
echo $d
|
|
||||||
did=`echo $d|jq -r .did`
|
|
||||||
echo $did
|
|
||||||
|
|
||||||
collection=app.bsky.feed.post
|
|
||||||
url=$api/com.atproto.repo.listRecords
|
|
||||||
timed=`curl -sL "${url}?repo=$handle&collection=$collection&reverse=true&limit=1"|jq -r ".[]|.[0]?|.value.createdAt"`
|
|
||||||
cid=`curl -sL "${url}?repo=$handle&collection=$collection&reverse=true&limit=1"|jq -r ".[]|.[0]?|.cid"`
|
|
||||||
uri=`curl -sL "${url}?repo=$handle&collection=$collection&reverse=true&limit=1"|jq -r ".[]|.[0]?|.uri"`
|
|
||||||
|
|
||||||
rkey=`echo $uri|cut -d / -f 5`
|
|
||||||
url=$api/com.atproto.repo.getRecord
|
|
||||||
curl -sL "$url?repo=$did&collection=$collection&rkey=$rkey"|jq .
|
|
||||||
|
|
||||||
uri=at://did:plc:vjug55kidv6sye7ykr5faxxn/app.bsky.feed.post/3jzn6g7ixgq2y
|
|
||||||
cid=bafyreiey2tt4dhvuvr7tofatdverqrxmscnnus2uyfcmkacn2fov3vb4wa
|
|
||||||
did=did:plc:vjug55kidv6sye7ykr5faxxn
|
|
||||||
rkey=3jzn6g7ixgq2y
|
|
||||||
url=$api/com.atproto.repo.getRecord
|
|
||||||
curl -sL "$url?repo=$did&collection=$collection&rkey=$rkey&cid="|jq .
|
|
||||||
```
|
|
||||||
|
|
231
docs/wiki.md
231
docs/wiki.md
@@ -1,230 +1 @@
|
|||||||
## test-notify
|
##
|
||||||
|
|
||||||
```sh
|
|
||||||
./target/debug/ai n|jq -r ".notifications|.[].cid" >> ~/.config/ai/txt/notify_cid*
|
|
||||||
./target/debug/ai bot
|
|
||||||
```
|
|
||||||
|
|
||||||
## docker
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ docker run -it syui/aios ai
|
|
||||||
$ docker run -it -d syui/aios zsh -c "ai login <handle> -p <password> && ai bot"
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ cp -rf ~/.config/ai ./.config/
|
|
||||||
|
|
||||||
$ docker compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
## cron
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ sudo pacman -S fcron
|
|
||||||
$ fcrontab -e
|
|
||||||
* * * * * $HOME/bot/test/ai.zsh c
|
|
||||||
```
|
|
||||||
|
|
||||||
## ssh
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ssh-keygen -f /.ssh/diffusers.key -t ed25519
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
FROM syui/aios
|
|
||||||
ADD .ssh /root/.ssh
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
Host diffusers
|
|
||||||
HostName localhost
|
|
||||||
User root
|
|
||||||
IdentityFile ~/.ssh/diffusers.key
|
|
||||||
StrictHostKeyChecking no
|
|
||||||
UserKnownHostsFile /dev/null
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
services:
|
|
||||||
aios:
|
|
||||||
#image: syui/aios
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- ./.config:/root/.config
|
|
||||||
command: ai bot -a syui.syu.is
|
|
||||||
```
|
|
||||||
|
|
||||||
## openapi
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# https://github.com/rdmurphy/atproto-openapi-types
|
|
||||||
$ curl -sLO https://raw.githubusercontent.com/rdmurphy/atproto-openapi-types/main/spec/api.json
|
|
||||||
```
|
|
||||||
|
|
||||||
## plc
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# 何度か実行するとplcをlatestまでexportされる
|
|
||||||
$ .config/ai/scpt/test/pds.zsh e
|
|
||||||
```
|
|
||||||
|
|
||||||
## cmt
|
|
||||||
|
|
||||||
blogなどにblueskyアカウントのpostを表示します。
|
|
||||||
|
|
||||||
以下でbotがblogのコメントシステムを開きます。
|
|
||||||
|
|
||||||
```sh
|
|
||||||
@yui.syui.ai /comment https://syui.ai/blog/post/2024/04/25/bluesky/
|
|
||||||
```
|
|
||||||
|
|
||||||
開いたbotのpostに返信することで、特定のblog path上でpostを表示します。
|
|
||||||
|
|
||||||
<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3kqxbtmwlje2h" data-bluesky-cid="bafyreiasxp5g3nkkd6g7lxh55qaxcc7ylefaljmbcp627nu2geks62c57m"><p lang="">please reply with your comments here ↓
|
|
||||||
</p>— ai (<a href="https://bsky.app/profile/did:plc:4hqjfn7m6n5hno3doamuhgef?ref_src=embed">@yui.syui.ai</a>) <a href="https://bsky.app/profile/did:plc:4hqjfn7m6n5hno3doamuhgef/post/3kqxbtmwlje2h?ref_src=embed">Apr 25, 2024 at 20:18</a></blockquote><script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
|
|
||||||
|
|
||||||
```ts
|
|
||||||
<link href="https://syui.ai/js/comment/app.js" rel="preload" as="script">
|
|
||||||
<link href="https://syui.ai/js/comment/chunk-vendors.js" rel="preload" as="script">
|
|
||||||
<div id="comment"></div>
|
|
||||||
<script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
|
|
||||||
<script src="https://syui.ai/js/comment/chunk-vendors.js"></script>
|
|
||||||
<script src="https://syui.ai/js/comment/app.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
## example json
|
|
||||||
|
|
||||||
```json
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"uri": "at://did:plc:wkzuqomvkxx5eiv5nl2lvm23/app.bsky.feed.post/3kp4ze5dcek2j",
|
|
||||||
"cid": "bafyreic4g7mthhw654zgv4skt5tqbs2xqg6n7bli4gayl2nquljngnotiy",
|
|
||||||
"author": {
|
|
||||||
"did": "did:plc:wkzuqomvkxx5eiv5nl2lvm23",
|
|
||||||
"handle": "syui.syu.is",
|
|
||||||
"displayName": "syui",
|
|
||||||
"avatar": "https://api.syu.is/img/avatar/plain/did:plc:wkzuqomvkxx5eiv5nl2lvm23/bafkreifvabvstfgawt6csagh44xdevb6c2uiwpgfho3xnpdrr6o7nbkxry@jpeg",
|
|
||||||
"indexedAt": "2024-01-14T10:20:13.367Z",
|
|
||||||
"viewer": {
|
|
||||||
"muted": false,
|
|
||||||
"blockedBy": false,
|
|
||||||
"following": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.graph.follow/3kiztjatnms25",
|
|
||||||
"followedBy": "at://did:plc:wkzuqomvkxx5eiv5nl2lvm23/app.bsky.graph.follow/3kirwsboeos26"
|
|
||||||
},
|
|
||||||
"labels": []
|
|
||||||
},
|
|
||||||
"reason": "reply",
|
|
||||||
"reasonSubject": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j",
|
|
||||||
"record": {
|
|
||||||
"text": "1",
|
|
||||||
"$type": "app.bsky.feed.post",
|
|
||||||
"langs": [
|
|
||||||
"ja"
|
|
||||||
],
|
|
||||||
"reply": {
|
|
||||||
"root": {
|
|
||||||
"cid": "bafyreiceckunxajycacn7dbuojrwb2wmurhfkleermvewwik44cn6vqo3a",
|
|
||||||
"uri": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j"
|
|
||||||
},
|
|
||||||
"parent": {
|
|
||||||
"cid": "bafyreiceckunxajycacn7dbuojrwb2wmurhfkleermvewwik44cn6vqo3a",
|
|
||||||
"uri": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"createdAt": "2024-04-02T07:12:28.799Z"
|
|
||||||
},
|
|
||||||
"isRead": true,
|
|
||||||
"indexedAt": "2024-04-02T07:12:28.799Z",
|
|
||||||
"labels": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "at://did:plc:wkzuqomvkxx5eiv5nl2lvm23/app.bsky.feed.post/3kp54af2zes2j",
|
|
||||||
"cid": "bafyreig4kvfpu557qehttt2y5eh7rcyodbxqwtnl73f3fhjsstiap3abzu",
|
|
||||||
"author": {
|
|
||||||
"did": "did:plc:wkzuqomvkxx5eiv5nl2lvm23",
|
|
||||||
"handle": "syui.syu.is",
|
|
||||||
"displayName": "syui",
|
|
||||||
"avatar": "https://api.syu.is/img/avatar/plain/did:plc:wkzuqomvkxx5eiv5nl2lvm23/bafkreifvabvstfgawt6csagh44xdevb6c2uiwpgfho3xnpdrr6o7nbkxry@jpeg",
|
|
||||||
"indexedAt": "2024-01-14T10:20:13.367Z",
|
|
||||||
"viewer": {
|
|
||||||
"muted": false,
|
|
||||||
"blockedBy": false,
|
|
||||||
"following": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.graph.follow/3kiztjatnms25",
|
|
||||||
"followedBy": "at://did:plc:wkzuqomvkxx5eiv5nl2lvm23/app.bsky.graph.follow/3kirwsboeos26"
|
|
||||||
},
|
|
||||||
"labels": []
|
|
||||||
},
|
|
||||||
"reason": "reply",
|
|
||||||
"reasonSubject": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j",
|
|
||||||
"record": {
|
|
||||||
"text": "2",
|
|
||||||
"$type": "app.bsky.feed.post",
|
|
||||||
"langs": [
|
|
||||||
"ja"
|
|
||||||
],
|
|
||||||
"reply": {
|
|
||||||
"root": {
|
|
||||||
"cid": "bafyreiceckunxajycacn7dbuojrwb2wmurhfkleermvewwik44cn6vqo3a",
|
|
||||||
"uri": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j"
|
|
||||||
},
|
|
||||||
"parent": {
|
|
||||||
"cid": "bafyreiceckunxajycacn7dbuojrwb2wmurhfkleermvewwik44cn6vqo3a",
|
|
||||||
"uri": "at://did:plc:dconvttcori3mrh2wrmehvwt/app.bsky.feed.post/3kp4zdnlo5s2j"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"createdAt": "2024-04-02T08:04:03.938Z"
|
|
||||||
},
|
|
||||||
"isRead": true,
|
|
||||||
"indexedAt": "2024-04-02T08:04:03.938Z",
|
|
||||||
"labels": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"uri": "at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3kp5qniyzm42h",
|
|
||||||
"cid": "bafyreihmutmtf2clpgmx5l3qpu6xea6z25xrop74mltsycs5lfacm27u6e",
|
|
||||||
"author": {
|
|
||||||
"did": "did:plc:uqzpqmrjnptsxezjx4xuh2mn",
|
|
||||||
"handle": "syui.ai",
|
|
||||||
"displayName": "syui",
|
|
||||||
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:uqzpqmrjnptsxezjx4xuh2mn/bafkreid6kcc5pnn4b3ar7mj6vi3eiawhxgkcrw3edgbqeacyrlnlcoetea@jpeg",
|
|
||||||
"viewer": {
|
|
||||||
"muted": false,
|
|
||||||
"blockedBy": false,
|
|
||||||
"followedBy": "at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.graph.follow/3kkvst5iq6r2a"
|
|
||||||
},
|
|
||||||
"labels": [],
|
|
||||||
"description": "https://syui.ai",
|
|
||||||
"indexedAt": "2024-01-25T23:54:12.979Z"
|
|
||||||
},
|
|
||||||
"reason": "reply",
|
|
||||||
"reasonSubject": "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3kp5qn72s232q",
|
|
||||||
"record": {
|
|
||||||
"$type": "app.bsky.feed.post",
|
|
||||||
"createdAt": "2024-04-02T14:09:18.926Z",
|
|
||||||
"langs": [
|
|
||||||
"ja"
|
|
||||||
],
|
|
||||||
"reply": {
|
|
||||||
"parent": {
|
|
||||||
"cid": "bafyreiewdfyh6rywpkdzpmf5markqa6tavc5smc32q7cw2wpwbqik5hnfm",
|
|
||||||
"uri": "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3kp5qn72s232q"
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"cid": "bafyreiewdfyh6rywpkdzpmf5markqa6tavc5smc32q7cw2wpwbqik5hnfm",
|
|
||||||
"uri": "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3kp5qn72s232q"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"text": "first"
|
|
||||||
},
|
|
||||||
"isRead": true,
|
|
||||||
"indexedAt": "2024-04-02T14:09:18.926Z",
|
|
||||||
"labels": []
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 433 KiB |
@@ -1,57 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.cmd: kompose convert -f ../compose.yml --volumes hostPath
|
|
||||||
kompose.version: 1.32.0 (HEAD)
|
|
||||||
labels:
|
|
||||||
io.kompose.service: aios
|
|
||||||
name: aios
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
io.kompose.service: aios
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.cmd: kompose convert -f ../compose.yml --volumes hostPath
|
|
||||||
kompose.version: 1.32.0 (HEAD)
|
|
||||||
labels:
|
|
||||||
io.kompose.network/bot-default: "true"
|
|
||||||
io.kompose.service: aios
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- env:
|
|
||||||
- name: ADMIN
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
key: ADMIN
|
|
||||||
name: env
|
|
||||||
- name: HANDLE
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
key: HANDLE
|
|
||||||
name: env
|
|
||||||
- name: HOST
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
key: HOST
|
|
||||||
name: env
|
|
||||||
- name: PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
key: PASSWORD
|
|
||||||
name: env
|
|
||||||
image: aios
|
|
||||||
name: aios
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /root/.config
|
|
||||||
name: aios-hostpath0
|
|
||||||
restartPolicy: Always
|
|
||||||
volumes:
|
|
||||||
- hostPath:
|
|
||||||
path: /Users/syui/ai/bot/.config
|
|
||||||
name: aios-hostpath0
|
|
@@ -1,11 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
data:
|
|
||||||
ADMIN: $ADMIN
|
|
||||||
HANDLE: $HANDLE
|
|
||||||
HOST: $HOST
|
|
||||||
PASSWORD: $PASSWORD
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
io.kompose.service: aios-env
|
|
||||||
name: env
|
|
947
src/bot.rs
947
src/bot.rs
File diff suppressed because it is too large
Load Diff
55
src/data.rs
55
src/data.rs
@@ -34,7 +34,6 @@ pub fn log_file(s: &str) -> String {
|
|||||||
match &*s {
|
match &*s {
|
||||||
"n1" => f + &"notify_cid.txt",
|
"n1" => f + &"notify_cid.txt",
|
||||||
"n2" => f + &"notify_cid_run.txt",
|
"n2" => f + &"notify_cid_run.txt",
|
||||||
"c1" => f + &"comment_cid.txt",
|
|
||||||
_ => f + &s,
|
_ => f + &s,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +84,6 @@ pub struct Token {
|
|||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub struct Data {
|
pub struct Data {
|
||||||
pub host: String,
|
pub host: String,
|
||||||
pub password: String,
|
|
||||||
pub did: String,
|
pub did: String,
|
||||||
pub handle: String,
|
pub handle: String,
|
||||||
pub access: String,
|
pub access: String,
|
||||||
@@ -107,7 +105,6 @@ pub struct BaseUrl {
|
|||||||
pub record_list: String,
|
pub record_list: String,
|
||||||
pub record_create: String,
|
pub record_create: String,
|
||||||
pub record_delete: String,
|
pub record_delete: String,
|
||||||
pub record_put: String,
|
|
||||||
pub session_create: String,
|
pub session_create: String,
|
||||||
pub session_refresh: String,
|
pub session_refresh: String,
|
||||||
pub session_get: String,
|
pub session_get: String,
|
||||||
@@ -125,7 +122,6 @@ pub struct BaseUrl {
|
|||||||
pub follow: String,
|
pub follow: String,
|
||||||
pub follows: String,
|
pub follows: String,
|
||||||
pub followers: String,
|
pub followers: String,
|
||||||
pub feed_get: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn url(s: &str) -> String {
|
pub fn url(s: &str) -> String {
|
||||||
@@ -133,7 +129,6 @@ pub fn url(s: &str) -> String {
|
|||||||
let data = Data::new().unwrap();
|
let data = Data::new().unwrap();
|
||||||
let data = Data {
|
let data = Data {
|
||||||
host: data.host,
|
host: data.host,
|
||||||
password: data.password,
|
|
||||||
handle: data.handle,
|
handle: data.handle,
|
||||||
did: data.did,
|
did: data.did,
|
||||||
access: data.access,
|
access: data.access,
|
||||||
@@ -143,7 +138,6 @@ pub fn url(s: &str) -> String {
|
|||||||
let baseurl = BaseUrl {
|
let baseurl = BaseUrl {
|
||||||
profile_get: "com.atproto.identity.resolveHandle".to_string(),
|
profile_get: "com.atproto.identity.resolveHandle".to_string(),
|
||||||
thread_get: "app.bsky.feed.getPostThread".to_string(),
|
thread_get: "app.bsky.feed.getPostThread".to_string(),
|
||||||
record_put: "com.atproto.repo.putRecord".to_string(),
|
|
||||||
record_create: "com.atproto.repo.createRecord".to_string(),
|
record_create: "com.atproto.repo.createRecord".to_string(),
|
||||||
record_delete: "com.atproto.repo.deleteRecord".to_string(),
|
record_delete: "com.atproto.repo.deleteRecord".to_string(),
|
||||||
describe: "com.atproto.repo.describeRepo".to_string(),
|
describe: "com.atproto.repo.describeRepo".to_string(),
|
||||||
@@ -152,7 +146,6 @@ pub fn url(s: &str) -> String {
|
|||||||
session_refresh: "com.atproto.server.refreshSession".to_string(),
|
session_refresh: "com.atproto.server.refreshSession".to_string(),
|
||||||
session_get: "com.atproto.server.getSession".to_string(),
|
session_get: "com.atproto.server.getSession".to_string(),
|
||||||
timeline_get: "app.bsky.feed.getTimeline".to_string(),
|
timeline_get: "app.bsky.feed.getTimeline".to_string(),
|
||||||
feed_get: "app.bsky.feed.getFeed".to_string(),
|
|
||||||
timeline_author: "app.bsky.feed.getAuthorFeed".to_string(),
|
timeline_author: "app.bsky.feed.getAuthorFeed".to_string(),
|
||||||
like: "app.bsky.feed.like".to_string(),
|
like: "app.bsky.feed.like".to_string(),
|
||||||
repost: "app.bsky.feed.repost".to_string(),
|
repost: "app.bsky.feed.repost".to_string(),
|
||||||
@@ -175,7 +168,6 @@ pub fn url(s: &str) -> String {
|
|||||||
"record_list" => t.to_string() + &baseurl.record_list,
|
"record_list" => t.to_string() + &baseurl.record_list,
|
||||||
"record_create" => t.to_string() + &baseurl.record_create,
|
"record_create" => t.to_string() + &baseurl.record_create,
|
||||||
"record_delete" => t.to_string() + &baseurl.record_delete,
|
"record_delete" => t.to_string() + &baseurl.record_delete,
|
||||||
"record_put" => t.to_string() + &baseurl.record_put,
|
|
||||||
"session_create" => t.to_string() + &baseurl.session_create,
|
"session_create" => t.to_string() + &baseurl.session_create,
|
||||||
"session_refresh" => t.to_string() + &baseurl.session_refresh,
|
"session_refresh" => t.to_string() + &baseurl.session_refresh,
|
||||||
"session_get" => t.to_string() + &baseurl.session_get,
|
"session_get" => t.to_string() + &baseurl.session_get,
|
||||||
@@ -193,7 +185,6 @@ pub fn url(s: &str) -> String {
|
|||||||
"follow" => t.to_string() + &baseurl.follow,
|
"follow" => t.to_string() + &baseurl.follow,
|
||||||
"follows" => t.to_string() + &baseurl.follows,
|
"follows" => t.to_string() + &baseurl.follows,
|
||||||
"followers" => t.to_string() + &baseurl.followers,
|
"followers" => t.to_string() + &baseurl.followers,
|
||||||
"feed_get" => t.to_string() + &baseurl.feed_get,
|
|
||||||
_ => s,
|
_ => s,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,15 +194,13 @@ pub fn data_toml(s: &str) -> String {
|
|||||||
let data = Data::new().unwrap();
|
let data = Data::new().unwrap();
|
||||||
let data = Data {
|
let data = Data {
|
||||||
host: data.host,
|
host: data.host,
|
||||||
password: data.password,
|
|
||||||
handle: data.handle,
|
handle: data.handle,
|
||||||
did: data.did,
|
did: data.did,
|
||||||
access: data.access,
|
access: data.access,
|
||||||
refresh: data.refresh,
|
refresh: data.refresh,
|
||||||
};
|
};
|
||||||
match &*s {
|
match &*s {
|
||||||
"host" => data.host,
|
"host" => data.handle,
|
||||||
"password" => data.password,
|
|
||||||
"handle" => data.handle,
|
"handle" => data.handle,
|
||||||
"did" => data.did,
|
"did" => data.did,
|
||||||
"access" => data.access,
|
"access" => data.access,
|
||||||
@@ -220,35 +209,8 @@ pub fn data_toml(s: &str) -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn c_refresh(access: &str, refresh: &str) {
|
|
||||||
let ff = data_file(&"refresh");
|
|
||||||
let mut ff = fs::File::create(ff.clone()).unwrap();
|
|
||||||
let refreshs = Refresh {
|
|
||||||
access: access.to_string(),
|
|
||||||
refresh: refresh.to_string(),
|
|
||||||
};
|
|
||||||
let toml = toml::to_string(&refreshs).unwrap();
|
|
||||||
ff.write_all(&toml.as_bytes()).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn data_refresh(s: &str) -> String {
|
pub fn data_refresh(s: &str) -> String {
|
||||||
let s = String::from(s);
|
let s = String::from(s);
|
||||||
|
|
||||||
let data = Data::new().unwrap();
|
|
||||||
let data = Data {
|
|
||||||
host: data.host,
|
|
||||||
password: data.password,
|
|
||||||
handle: data.handle,
|
|
||||||
did: data.did,
|
|
||||||
access: data.access,
|
|
||||||
refresh: data.refresh,
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut _file = match Refresh::new()
|
|
||||||
{
|
|
||||||
Err(_why) => c_refresh(&data.access, &data.refresh),
|
|
||||||
Ok(_) => println!(""),
|
|
||||||
};
|
|
||||||
let refresh = Refresh::new().unwrap();
|
let refresh = Refresh::new().unwrap();
|
||||||
let refresh = Refresh {
|
let refresh = Refresh {
|
||||||
access: refresh.access,
|
access: refresh.access,
|
||||||
@@ -528,7 +490,7 @@ pub fn c_char(i: String) -> String {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn w_cfg(h: &str, res: &str, password: &str) {
|
pub fn w_cfg(h: &str, res: &str) {
|
||||||
let f = data_file(&"json");
|
let f = data_file(&"json");
|
||||||
let ff = data_file(&"toml");
|
let ff = data_file(&"toml");
|
||||||
let mut f = fs::File::create(f.clone()).unwrap();
|
let mut f = fs::File::create(f.clone()).unwrap();
|
||||||
@@ -537,7 +499,6 @@ pub fn w_cfg(h: &str, res: &str, password: &str) {
|
|||||||
let json: Token = serde_json::from_str(&res).unwrap();
|
let json: Token = serde_json::from_str(&res).unwrap();
|
||||||
let datas = Data {
|
let datas = Data {
|
||||||
host: h.to_string(),
|
host: h.to_string(),
|
||||||
password: password.to_string(),
|
|
||||||
did: json.did.to_string(),
|
did: json.did.to_string(),
|
||||||
handle: json.handle.to_string(),
|
handle: json.handle.to_string(),
|
||||||
access: json.accessJwt.to_string(),
|
access: json.accessJwt.to_string(),
|
||||||
@@ -545,20 +506,14 @@ pub fn w_cfg(h: &str, res: &str, password: &str) {
|
|||||||
};
|
};
|
||||||
let toml = toml::to_string(&datas).unwrap();
|
let toml = toml::to_string(&datas).unwrap();
|
||||||
ff.write_all(&toml.as_bytes()).unwrap();
|
ff.write_all(&toml.as_bytes()).unwrap();
|
||||||
|
|
||||||
let ff = data_file(&"refresh");
|
|
||||||
let mut ff = fs::File::create(ff.clone()).unwrap();
|
|
||||||
let refreshs = Refresh {
|
|
||||||
access: json.accessJwt.to_string(),
|
|
||||||
refresh: json.refreshJwt.to_string(),
|
|
||||||
};
|
|
||||||
let toml = toml::to_string(&refreshs).unwrap();
|
|
||||||
ff.write_all(&toml.as_bytes()).unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn w_refresh(res: &str) {
|
pub fn w_refresh(res: &str) {
|
||||||
|
let f = data_file(&"json");
|
||||||
let ff = data_file(&"refresh");
|
let ff = data_file(&"refresh");
|
||||||
|
let mut f = fs::File::create(f.clone()).unwrap();
|
||||||
let mut ff = fs::File::create(ff.clone()).unwrap();
|
let mut ff = fs::File::create(ff.clone()).unwrap();
|
||||||
|
f.write_all(&res.as_bytes()).unwrap();
|
||||||
let json: Token = serde_json::from_str(&res).unwrap();
|
let json: Token = serde_json::from_str(&res).unwrap();
|
||||||
let refreshs = Refresh {
|
let refreshs = Refresh {
|
||||||
access: json.accessJwt.to_string(),
|
access: json.accessJwt.to_string(),
|
||||||
|
@@ -1,33 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(rkey: String, col: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
//let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
|
|
||||||
let url = url(&"record_delete");
|
|
||||||
|
|
||||||
let post = Some(json!({
|
|
||||||
"repo": handle.to_string(),
|
|
||||||
"rkey": rkey.to_string(),
|
|
||||||
"collection": col.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;
|
|
||||||
}
|
|
@@ -1,33 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
|
|
||||||
pub async fn get_request(feed: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let url = url(&"feed_get");
|
|
||||||
let feed = feed.to_string();
|
|
||||||
//let col = "app.bsky.feed.generator".to_string();
|
|
||||||
|
|
||||||
let client = reqwest::Client::new();
|
|
||||||
let res = client
|
|
||||||
.get(url)
|
|
||||||
.query(&[("feed", feed)])
|
|
||||||
//.query(&[("feed", feed), ("collection", col)])
|
|
||||||
.header("Authorization", "Bearer ".to_owned() + &token)
|
|
||||||
.send()
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let status_ref = res.error_for_status_ref();
|
|
||||||
|
|
||||||
match status_ref {
|
|
||||||
Ok(_) => {
|
|
||||||
return res.text().await.unwrap();
|
|
||||||
}
|
|
||||||
Err(_e) => {
|
|
||||||
let e = "err".to_string();
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,77 +0,0 @@
|
|||||||
use seahorse::Context;
|
|
||||||
|
|
||||||
//use crate::openai;
|
|
||||||
use crate::feed_get;
|
|
||||||
|
|
||||||
use crate::data::data_toml;
|
|
||||||
use crate::data::Timeline;
|
|
||||||
use crate::data::log_file;
|
|
||||||
use crate::data::w_cid;
|
|
||||||
|
|
||||||
pub fn c_feed_watch(c: &Context) {
|
|
||||||
let mut feed = "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd".to_string();
|
|
||||||
if c.string_flag("url").is_ok() {
|
|
||||||
feed = c.string_flag("url").unwrap();
|
|
||||||
}
|
|
||||||
let mut tag = "syai".to_string();
|
|
||||||
if c.string_flag("tag").is_ok() {
|
|
||||||
tag = c.string_flag("tag").unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
let h = async {
|
|
||||||
let notify = feed_get::get_request(feed).await;
|
|
||||||
if notify == "err" {
|
|
||||||
return;
|
|
||||||
//refresh(c);
|
|
||||||
//notify = feed_get::get_request("at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd".to_string()).await;
|
|
||||||
}
|
|
||||||
let timeline: Timeline = serde_json::from_str(¬ify).unwrap();
|
|
||||||
let n = timeline.feed;
|
|
||||||
let host = data_toml(&"host");
|
|
||||||
let length = &n.len();
|
|
||||||
let su = 0..*length;
|
|
||||||
for i in su {
|
|
||||||
let cid = &n[i].post.cid;
|
|
||||||
let check_cid = w_cid(cid.to_string(), log_file(&"n1"), false);
|
|
||||||
let handle = &n[i].post.author.handle;
|
|
||||||
let did = &n[i].post.author.did;
|
|
||||||
let uri = &n[i].post.uri;
|
|
||||||
let _time = &n[i].post.indexedAt;
|
|
||||||
let cid_root = cid;
|
|
||||||
let uri_root = uri;
|
|
||||||
let mut text = "";
|
|
||||||
if !n[i].post.record.text.is_none() {
|
|
||||||
text = &n[i].post.record.text.as_ref().unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
let vec: Vec<&str> = text.split_whitespace().collect();
|
|
||||||
let com = vec[0].trim().to_string();
|
|
||||||
let mut prompt = "".to_string();
|
|
||||||
let mut prompt_sub = "".to_string();
|
|
||||||
|
|
||||||
if com == "@ai" || com == "/ai" || com == tag {
|
|
||||||
prompt_sub = vec[1..].join(" ");
|
|
||||||
} else {
|
|
||||||
prompt = vec[1..].join(" ");
|
|
||||||
if vec.len() > 1 {
|
|
||||||
prompt_sub = vec[2..].join(" ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if check_cid == false && { prompt.is_empty() == false || com.is_empty() == false } {
|
|
||||||
println!("{}", handle);
|
|
||||||
if c.bool_flag("debug") == true {
|
|
||||||
println!(
|
|
||||||
"cid:{}\nuri:{}\ncid_root:{}\nuri_root:{}\nhost:{}\ndid:{}\ncheck_cid:{}",
|
|
||||||
cid, uri, cid_root, uri_root, host, did, check_cid
|
|
||||||
);
|
|
||||||
}
|
|
||||||
println!("{}", prompt_sub);
|
|
||||||
println!("---");
|
|
||||||
w_cid(cid.to_string(), log_file(&"n1"), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
|
||||||
return res;
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
pub mod post_card;
|
|
||||||
pub mod post_card_verify;
|
|
||||||
pub mod post_game;
|
|
||||||
pub mod post_game_user;
|
|
||||||
pub mod post_game_login;
|
|
@@ -1,44 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use iso8601_timestamp::Timestamp;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(verify: String, id: i32, cp: i32, rank: i32, rare: String, col: String, author: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
let url = url(&"record_create");
|
|
||||||
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": {
|
|
||||||
"id": id,
|
|
||||||
"cp": cp,
|
|
||||||
"rank": rank,
|
|
||||||
"rare": rare.to_string(),
|
|
||||||
"author": author.to_string(),
|
|
||||||
"verify": verify.to_string(),
|
|
||||||
"createdAt": d.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;
|
|
||||||
}
|
|
@@ -1,58 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use iso8601_timestamp::Timestamp;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(col: String, img: String, id: i32, cp: i32, rank: i32, rare: String, user_handle: String, user_did: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
let url = url(&"record_create");
|
|
||||||
let d = Timestamp::now_utc();
|
|
||||||
let d = d.to_string();
|
|
||||||
let link = "https://bsky.app/profile/yui.syui.ai".to_string();
|
|
||||||
let post = Some(json!({
|
|
||||||
"repo": handle.to_string(),
|
|
||||||
"did": did.to_string(),
|
|
||||||
"collection": col.to_string(),
|
|
||||||
"record": {
|
|
||||||
"id": id,
|
|
||||||
"cp": cp,
|
|
||||||
"rank": rank,
|
|
||||||
"rare": rare.to_string(),
|
|
||||||
"handle": user_handle.to_string(),
|
|
||||||
"did": user_did.to_string(),
|
|
||||||
"embed": {
|
|
||||||
"$type": "app.bsky.embed.external",
|
|
||||||
"external": {
|
|
||||||
"uri": link,
|
|
||||||
"thumb": {
|
|
||||||
"$type": "blob",
|
|
||||||
"ref": {
|
|
||||||
"$link": img.to_string()
|
|
||||||
},
|
|
||||||
"mimeType": "image/jpeg",
|
|
||||||
"size": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"createdAt": d.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;
|
|
||||||
}
|
|
@@ -1,39 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use iso8601_timestamp::Timestamp;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(col: String, account: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
let url = url(&"record_put");
|
|
||||||
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(),
|
|
||||||
"rkey": "self".to_string(),
|
|
||||||
"record": {
|
|
||||||
"account": account.to_string(),
|
|
||||||
"createdAt": d.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;
|
|
||||||
}
|
|
@@ -1,42 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use iso8601_timestamp::Timestamp;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(col: String, username: String, login: bool, account: String) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
let url = url(&"record_put");
|
|
||||||
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(),
|
|
||||||
"rkey": "self".to_string(),
|
|
||||||
"record": {
|
|
||||||
"login": login,
|
|
||||||
"username": username.to_string(),
|
|
||||||
"account": account.to_string(),
|
|
||||||
"createdAt": d.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;
|
|
||||||
}
|
|
@@ -1,55 +0,0 @@
|
|||||||
extern crate reqwest;
|
|
||||||
use crate::data_toml;
|
|
||||||
use crate::data_refresh;
|
|
||||||
use crate::url;
|
|
||||||
use iso8601_timestamp::Timestamp;
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
pub async fn post_request(col: String, user_name: String, user_did: String, user_handle: String, aiten: i32, limit: i32, chara: String, lv: i32, exp: i32, hp: i32, rank: i32, mode: i32, attach: i32, critical: i32, critical_d: i32) -> String {
|
|
||||||
let token = data_refresh(&"access");
|
|
||||||
let did = data_toml(&"did");
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
let url = url(&"record_put");
|
|
||||||
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(),
|
|
||||||
"rkey": user_name.to_string(),
|
|
||||||
"record": {
|
|
||||||
"did": user_did.to_string(),
|
|
||||||
"handle": user_handle.to_string(),
|
|
||||||
"aiten": aiten,
|
|
||||||
"limit": limit,
|
|
||||||
"character": {
|
|
||||||
chara.to_string(): {
|
|
||||||
"lv": lv,
|
|
||||||
"exp": exp,
|
|
||||||
"hp": hp,
|
|
||||||
"rank": rank,
|
|
||||||
"mode": mode,
|
|
||||||
"attach": attach,
|
|
||||||
"critical": critical,
|
|
||||||
"critical_d": critical_d,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"createdAt": d.to_string(),
|
|
||||||
"updatedAt": d.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;
|
|
||||||
}
|
|
413
src/main.rs
413
src/main.rs
@@ -3,7 +3,6 @@ use std::env;
|
|||||||
|
|
||||||
use crate::ascii::c_ascii;
|
use crate::ascii::c_ascii;
|
||||||
use crate::bot::c_bot;
|
use crate::bot::c_bot;
|
||||||
use crate::bot::c_bot_feed;
|
|
||||||
use crate::data::c_follow_all;
|
use crate::data::c_follow_all;
|
||||||
use crate::data::c_openai_key;
|
use crate::data::c_openai_key;
|
||||||
use crate::data::data_toml;
|
use crate::data::data_toml;
|
||||||
@@ -11,12 +10,6 @@ use crate::data::data_refresh;
|
|||||||
use crate::data::url;
|
use crate::data::url;
|
||||||
use crate::data::w_cfg;
|
use crate::data::w_cfg;
|
||||||
use crate::data::w_refresh;
|
use crate::data::w_refresh;
|
||||||
use crate::feed_watch::c_feed_watch;
|
|
||||||
use crate::game::post_card;
|
|
||||||
use crate::game::post_card_verify;
|
|
||||||
use crate::game::post_game;
|
|
||||||
use crate::game::post_game_user;
|
|
||||||
use crate::game::post_game_login;
|
|
||||||
|
|
||||||
use data::ProfileIdentityResolve;
|
use data::ProfileIdentityResolve;
|
||||||
|
|
||||||
@@ -35,7 +28,6 @@ pub mod notify_read;
|
|||||||
pub mod openai;
|
pub mod openai;
|
||||||
pub mod post;
|
pub mod post;
|
||||||
pub mod post_link;
|
pub mod post_link;
|
||||||
pub mod game;
|
|
||||||
pub mod profile;
|
pub mod profile;
|
||||||
pub mod refresh;
|
pub mod refresh;
|
||||||
pub mod reply;
|
pub mod reply;
|
||||||
@@ -45,16 +37,10 @@ pub mod repost;
|
|||||||
pub mod session;
|
pub mod session;
|
||||||
pub mod timeline_author;
|
pub mod timeline_author;
|
||||||
pub mod token;
|
pub mod token;
|
||||||
pub mod feed_get;
|
|
||||||
pub mod feed_watch;
|
|
||||||
pub mod delete_record;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
let app = App::new(env!("CARGO_PKG_NAME"))
|
let app = App::new(env!("CARGO_PKG_NAME"))
|
||||||
.author(env!("CARGO_PKG_AUTHORS"))
|
|
||||||
.version(env!("CARGO_PKG_VERSION"))
|
|
||||||
.description(env!("CARGO_PKG_DESCRIPTION"))
|
|
||||||
.command(
|
.command(
|
||||||
Command::new("ai")
|
Command::new("ai")
|
||||||
.alias("a")
|
.alias("a")
|
||||||
@@ -73,26 +59,6 @@ fn main() {
|
|||||||
Flag::new("admin", FlagType::String)
|
Flag::new("admin", FlagType::String)
|
||||||
.alias("a"),
|
.alias("a"),
|
||||||
)
|
)
|
||||||
.flag(
|
|
||||||
Flag::new("feed", FlagType::String)
|
|
||||||
.alias("f"),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("feed_watch")
|
|
||||||
.action(feed_watch)
|
|
||||||
.flag(
|
|
||||||
Flag::new("url", FlagType::String)
|
|
||||||
.alias("u"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("tag", FlagType::String)
|
|
||||||
.alias("t"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("debug", FlagType::Bool)
|
|
||||||
.alias("d"),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.command(
|
.command(
|
||||||
Command::new("follow_all")
|
Command::new("follow_all")
|
||||||
@@ -129,12 +95,6 @@ fn main() {
|
|||||||
.alias("t")
|
.alias("t")
|
||||||
.action(timeline),
|
.action(timeline),
|
||||||
)
|
)
|
||||||
.command(
|
|
||||||
Command::new("feed")
|
|
||||||
.description("feed <feed-uri>")
|
|
||||||
.alias("f")
|
|
||||||
.action(feed)
|
|
||||||
)
|
|
||||||
.command(
|
.command(
|
||||||
Command::new("did")
|
Command::new("did")
|
||||||
.description("did <handle>")
|
.description("did <handle>")
|
||||||
@@ -150,170 +110,6 @@ fn main() {
|
|||||||
.alias("l"),
|
.alias("l"),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.command(
|
|
||||||
Command::new("delete")
|
|
||||||
.description("d <rkey> -c <collection>")
|
|
||||||
.alias("d")
|
|
||||||
.action(delete)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("card")
|
|
||||||
.description("-v <at://verify> -i <int:id> -p <int:cp> -r <int:rank> -c <collection> -a <author> -img <link> -rare <normal>")
|
|
||||||
.action(card)
|
|
||||||
.flag(
|
|
||||||
Flag::new("id", FlagType::Int)
|
|
||||||
.alias("i"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("cp", FlagType::Int)
|
|
||||||
.alias("p"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("rank", FlagType::Int)
|
|
||||||
.alias("r"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("rare", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("author", FlagType::String)
|
|
||||||
.alias("a"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("verify", FlagType::String)
|
|
||||||
.alias("v"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("img", FlagType::String)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("card-verify")
|
|
||||||
.description("<at://verify> -c <collection> -i <id> -p <cp> -r <rank> -rare <normal> -H <syui.ai> -d <did>")
|
|
||||||
.action(card_verify)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("id", FlagType::Int)
|
|
||||||
.alias("i"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("cp", FlagType::Int)
|
|
||||||
.alias("p"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("rank", FlagType::Int)
|
|
||||||
.alias("r"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("rare", FlagType::String)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("handle", FlagType::String)
|
|
||||||
.alias("H"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("did", FlagType::String)
|
|
||||||
.alias("did"),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("game")
|
|
||||||
.description("a <at://yui.syui.ai/ai.syui.game.user/username>")
|
|
||||||
.action(game)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("account", FlagType::String)
|
|
||||||
.alias("a"),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("game-login")
|
|
||||||
.description("l <bool> -u <username> -c <collection>")
|
|
||||||
.action(game_login)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("login", FlagType::Bool)
|
|
||||||
.alias("l"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("username", FlagType::String)
|
|
||||||
.alias("u"),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
|
||||||
Command::new("game-user")
|
|
||||||
.description("-chara ai -l 20240101 -ten 0 --lv 0 --exp 0 --hp 0 --rank 0 --mode 0 --attach 0 --critical 0 --critical_d 0")
|
|
||||||
.action(game_user)
|
|
||||||
.flag(
|
|
||||||
Flag::new("username", FlagType::String)
|
|
||||||
.alias("u"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("did", FlagType::String)
|
|
||||||
.alias("d"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("handle", FlagType::String)
|
|
||||||
.alias("H"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("character", FlagType::String)
|
|
||||||
.alias("chara"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("aiten", FlagType::Int)
|
|
||||||
.alias("ten"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("limit", FlagType::Int)
|
|
||||||
.alias("l"),
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("lv", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("hp", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("attach", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("exp", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("critical", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("critical_d", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("rank", FlagType::Int)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("mode", FlagType::Int)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.command(
|
.command(
|
||||||
Command::new("like")
|
Command::new("like")
|
||||||
.description("like <cid> -u <uri>")
|
.description("like <cid> -u <uri>")
|
||||||
@@ -344,12 +140,6 @@ fn main() {
|
|||||||
Flag::new("cid", FlagType::String)
|
Flag::new("cid", FlagType::String)
|
||||||
.alias("c"),
|
.alias("c"),
|
||||||
)
|
)
|
||||||
.flag(
|
|
||||||
Flag::new("uri-root", FlagType::String)
|
|
||||||
)
|
|
||||||
.flag(
|
|
||||||
Flag::new("cid-root", FlagType::String)
|
|
||||||
)
|
|
||||||
.flag(
|
.flag(
|
||||||
Flag::new("link", FlagType::String)
|
Flag::new("link", FlagType::String)
|
||||||
.alias("l"),
|
.alias("l"),
|
||||||
@@ -394,10 +184,6 @@ fn main() {
|
|||||||
Flag::new("post", FlagType::String)
|
Flag::new("post", FlagType::String)
|
||||||
.alias("p"),
|
.alias("p"),
|
||||||
)
|
)
|
||||||
.flag(
|
|
||||||
Flag::new("col", FlagType::String)
|
|
||||||
.alias("c"),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.command(
|
.command(
|
||||||
Command::new("follow")
|
Command::new("follow")
|
||||||
@@ -479,14 +265,6 @@ fn bot(c: &Context) {
|
|||||||
refresh(c);
|
refresh(c);
|
||||||
loop {
|
loop {
|
||||||
c_bot(c);
|
c_bot(c);
|
||||||
c_bot_feed(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn feed_watch(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
loop {
|
|
||||||
c_feed_watch(c);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,12 +282,14 @@ fn token(c: &Context) {
|
|||||||
if let Ok(p) = c.string_flag("password") {
|
if let Ok(p) = c.string_flag("password") {
|
||||||
if let Ok(s) = c.string_flag("server") {
|
if let Ok(s) = c.string_flag("server") {
|
||||||
let res = token::post_request(m.to_string(), p.to_string(), s.to_string()).await;
|
let res = token::post_request(m.to_string(), p.to_string(), s.to_string()).await;
|
||||||
w_cfg(&s, &res, &p);
|
w_cfg(&s, &res);
|
||||||
|
w_refresh(&res);
|
||||||
} else {
|
} else {
|
||||||
let res =
|
let res =
|
||||||
token::post_request(m.to_string(), p.to_string(), "bsky.social".to_string())
|
token::post_request(m.to_string(), p.to_string(), "bsky.social".to_string())
|
||||||
.await;
|
.await;
|
||||||
w_cfg(&"bsky.social", &res, &p);
|
w_cfg(&"bsky.social", &res);
|
||||||
|
w_refresh(&res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -522,15 +302,8 @@ fn refresh(_c: &Context) {
|
|||||||
let session = session::get_request().await;
|
let session = session::get_request().await;
|
||||||
if session == "err" {
|
if session == "err" {
|
||||||
let res = refresh::post_request().await;
|
let res = refresh::post_request().await;
|
||||||
if res == "err" {
|
println!("{}", res);
|
||||||
let m = data_toml(&"handle");
|
w_refresh(&res)
|
||||||
let p = data_toml(&"password");
|
|
||||||
let s = data_toml(&"host");
|
|
||||||
let res = token::post_request(m.to_string(), p.to_string(), s.to_string()).await;
|
|
||||||
w_cfg(&s, &res, &p);
|
|
||||||
} else {
|
|
||||||
w_refresh(&res);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
||||||
@@ -547,22 +320,6 @@ fn notify(c: &Context) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn feed(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
let feed_d = "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd".to_string();
|
|
||||||
let h = async {
|
|
||||||
if c.args.len() == 0 {
|
|
||||||
let j = feed_get::get_request(feed_d).await;
|
|
||||||
println!("{}", j);
|
|
||||||
} else {
|
|
||||||
let j = feed_get::get_request(c.args[0].to_string()).await;
|
|
||||||
println!("{}", j);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn did(c: &Context) {
|
fn did(c: &Context) {
|
||||||
refresh(c);
|
refresh(c);
|
||||||
let h = async {
|
let h = async {
|
||||||
@@ -612,19 +369,6 @@ fn post(c: &Context) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn delete(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
let m = c.args[0].to_string();
|
|
||||||
let h = async {
|
|
||||||
if let Ok(col) = c.string_flag("col") {
|
|
||||||
let str = delete_record::post_request(m.to_string(), col);
|
|
||||||
println!("{}", str.await);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn like(c: &Context) {
|
fn like(c: &Context) {
|
||||||
refresh(c);
|
refresh(c);
|
||||||
let m = c.args[0].to_string();
|
let m = c.args[0].to_string();
|
||||||
@@ -638,145 +382,6 @@ fn like(c: &Context) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn c_card(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
//let m = c.args[0].to_string();
|
|
||||||
let author = c.string_flag("author").unwrap_or_else(|_| "syui".to_string());
|
|
||||||
let verify = c.string_flag("verify").unwrap_or_else(|_| "at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.card.verify/3lagpvhppmd2q".to_string());
|
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card".to_string());
|
|
||||||
//let img = c.string_flag("img").unwrap_or_else(|_| "bafkreigvcjc46qtelpc4wsg7fwf6qktbi6a23ouqiupth2r37zhrn7wbza".to_string());
|
|
||||||
let id = c.int_flag("id")?.try_into()?;
|
|
||||||
let cp = c.int_flag("cp")?.try_into()?;
|
|
||||||
let rank = c.int_flag("rank")?.try_into()?;
|
|
||||||
let rare = c.string_flag("rare").unwrap_or_else(|_| "normal".to_string());
|
|
||||||
let str = post_card::post_request(verify, id, cp, rank, rare, col, author);
|
|
||||||
println!("{}", str.await);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn card(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
tokio::runtime::Runtime::new()
|
|
||||||
.unwrap()
|
|
||||||
.block_on(async {
|
|
||||||
if let Err(e) = c_card(c).await {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn c_card_verify(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card.verify".to_string());
|
|
||||||
let img = c.string_flag("img").unwrap_or_else(|_| "bafkreigvcjc46qtelpc4wsg7fwf6qktbi6a23ouqiupth2r37zhrn7wbza".to_string());
|
|
||||||
let id = c.int_flag("id")?.try_into()?;
|
|
||||||
let cp = c.int_flag("cp")?.try_into()?;
|
|
||||||
let rank = c.int_flag("rank")?.try_into()?;
|
|
||||||
let rare = c.string_flag("rare").unwrap_or_else(|_| "normal".to_string());
|
|
||||||
let user_handle = c.string_flag("handle").unwrap_or_else(|_| "syui.ai".to_string());
|
|
||||||
let user_did = c.string_flag("did").unwrap_or_else(|_| "did:plc:uqzpqmrjnptsxezjx4xuh2mn".to_string());
|
|
||||||
|
|
||||||
//match id === 1 let img = "xxx";
|
|
||||||
let str = post_card_verify::post_request(col, img, id, cp, rank, rare, user_handle, user_did);
|
|
||||||
println!("{}", str.await);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn card_verify(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
tokio::runtime::Runtime::new()
|
|
||||||
.unwrap()
|
|
||||||
.block_on(async {
|
|
||||||
if let Err(e) = c_card_verify(c).await {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn c_game(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let account = c.string_flag("account").unwrap_or_else(|_| "at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui".to_string());
|
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.game".to_string());
|
|
||||||
let handle = data_toml(&"handle");
|
|
||||||
if handle == "syui.ai" {
|
|
||||||
let str = post_game::post_request(col, account);
|
|
||||||
println!("{}", str.await);
|
|
||||||
Ok(())
|
|
||||||
} else {
|
|
||||||
Err(Box::new(std::io::Error::new(std::io::ErrorKind::PermissionDenied, "Not authorized")))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn game(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
tokio::runtime::Runtime::new()
|
|
||||||
.unwrap()
|
|
||||||
.block_on(async {
|
|
||||||
if let Err(e) = c_game(c).await {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn c_game_user(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.game.user".to_string());
|
|
||||||
let user_name = c.string_flag("username").unwrap_or_else(|_| "syui".to_string());
|
|
||||||
let user_handle = c.string_flag("handle").unwrap_or_else(|_| "syui.ai".to_string());
|
|
||||||
let user_did = c.string_flag("did").unwrap_or_else(|_| "did:plc:uqzpqmrjnptsxezjx4xuh2mn".to_string());
|
|
||||||
let chara = c.string_flag("character").unwrap_or_else(|_| "ai".to_string());
|
|
||||||
let limit = c.int_flag("limit")?.try_into()?;
|
|
||||||
let aiten = c.int_flag("aiten")?.try_into()?;
|
|
||||||
let lv = c.int_flag("lv")?.try_into()?;
|
|
||||||
let exp = c.int_flag("exp")?.try_into()?;
|
|
||||||
let hp = c.int_flag("hp")?.try_into()?;
|
|
||||||
let rank = c.int_flag("rank")?.try_into()?;
|
|
||||||
let mode = c.int_flag("mode")?.try_into()?;
|
|
||||||
let attach = c.int_flag("attach")?.try_into()?;
|
|
||||||
let critical = c.int_flag("critical")?.try_into()?;
|
|
||||||
let critical_d = c.int_flag("critical_d")?.try_into()?;
|
|
||||||
|
|
||||||
if data_toml(&"handle") == "yui.syui.ai" {
|
|
||||||
let str = post_game_user::post_request(col, user_name, user_did, user_handle, aiten, limit, chara, lv, exp, hp, rank, mode, attach, critical, critical_d);
|
|
||||||
println!("{}", str.await);
|
|
||||||
Ok(())
|
|
||||||
} else {
|
|
||||||
Err(Box::new(std::io::Error::new(std::io::ErrorKind::PermissionDenied, "Not authorized")))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn game_user(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
tokio::runtime::Runtime::new()
|
|
||||||
.unwrap()
|
|
||||||
.block_on(async {
|
|
||||||
if let Err(e) = c_game_user(c).await {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn c_game_login(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.game.login".to_string());
|
|
||||||
let user_name = c.string_flag("username").unwrap_or_else(|_| "syui".to_string());
|
|
||||||
let account = "at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/".to_string() + &user_name;
|
|
||||||
let login = c.bool_flag("login");
|
|
||||||
if data_toml(&"handle") == "yui.syui.ai" {
|
|
||||||
let str = post_game_login::post_request(col, user_name, login, account);
|
|
||||||
println!("{}", str.await);
|
|
||||||
Ok(())
|
|
||||||
} else {
|
|
||||||
Err(Box::new(std::io::Error::new(std::io::ErrorKind::PermissionDenied, "Not authorized")))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn game_login(c: &Context) {
|
|
||||||
refresh(c);
|
|
||||||
tokio::runtime::Runtime::new()
|
|
||||||
.unwrap()
|
|
||||||
.block_on(async {
|
|
||||||
if let Err(e) = c_game_login(c).await {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn repost(c: &Context) {
|
fn repost(c: &Context) {
|
||||||
refresh(c);
|
refresh(c);
|
||||||
let m = c.args[0].to_string();
|
let m = c.args[0].to_string();
|
||||||
@@ -831,7 +436,6 @@ fn mention(c: &Context) {
|
|||||||
let h = async {
|
let h = async {
|
||||||
let str = profile::get_request(m.to_string()).await;
|
let str = profile::get_request(m.to_string()).await;
|
||||||
let profile: ProfileIdentityResolve = serde_json::from_str(&str).unwrap();
|
let profile: ProfileIdentityResolve = serde_json::from_str(&str).unwrap();
|
||||||
let col = c.string_flag("col").unwrap_or_else(|_| "app.bsky.feed.post".to_string());
|
|
||||||
let udid = profile.did;
|
let udid = profile.did;
|
||||||
let handle = m.to_string();
|
let handle = m.to_string();
|
||||||
let at = "@".to_owned() + &handle;
|
let at = "@".to_owned() + &handle;
|
||||||
@@ -839,7 +443,6 @@ fn mention(c: &Context) {
|
|||||||
let s = 0;
|
let s = 0;
|
||||||
if let Ok(post) = c.string_flag("post") {
|
if let Ok(post) = c.string_flag("post") {
|
||||||
let str = mention::post_request(
|
let str = mention::post_request(
|
||||||
col,
|
|
||||||
post.to_string(),
|
post.to_string(),
|
||||||
at.to_string(),
|
at.to_string(),
|
||||||
udid.to_string(),
|
udid.to_string(),
|
||||||
@@ -958,13 +561,11 @@ fn reply_og(c: &Context) {
|
|||||||
let link = c.string_flag("link").unwrap();
|
let link = c.string_flag("link").unwrap();
|
||||||
let cid = c.string_flag("cid").unwrap();
|
let cid = c.string_flag("cid").unwrap();
|
||||||
let uri = c.string_flag("uri").unwrap();
|
let uri = c.string_flag("uri").unwrap();
|
||||||
let cid_root = c.string_flag("cid-root").unwrap();
|
|
||||||
let uri_root = c.string_flag("uri-root").unwrap();
|
|
||||||
let title = c.string_flag("title").unwrap();
|
let title = c.string_flag("title").unwrap();
|
||||||
let desc = c.string_flag("description").unwrap();
|
let desc = c.string_flag("description").unwrap();
|
||||||
let img = c.string_flag("img").unwrap();
|
let img = c.string_flag("img").unwrap();
|
||||||
let h = async {
|
let h = async {
|
||||||
let str = reply_og::post_request(m, link, cid, uri, cid_root, uri_root, img, title, desc);
|
let str = reply_og::post_request(m, link, cid, uri, img, title, desc);
|
||||||
println!("{}", str.await);
|
println!("{}", str.await);
|
||||||
};
|
};
|
||||||
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
|
||||||
|
@@ -5,13 +5,13 @@ use crate::url;
|
|||||||
use iso8601_timestamp::Timestamp;
|
use iso8601_timestamp::Timestamp;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
pub async fn post_request(col: String, text: String, at: String, udid: String, s: i32, e: i32) -> String {
|
pub async fn post_request(text: String, at: String, udid: String, s: i32, e: i32) -> String {
|
||||||
let token = data_refresh(&"access");
|
let token = data_refresh(&"access");
|
||||||
let did = data_toml(&"did");
|
let did = data_toml(&"did");
|
||||||
let handle = data_toml(&"handle");
|
let handle = data_toml(&"handle");
|
||||||
|
|
||||||
let url = url(&"record_create");
|
let url = url(&"record_create");
|
||||||
//let col = "app.bsky.feed.post".to_string();
|
let col = "app.bsky.feed.post".to_string();
|
||||||
|
|
||||||
let d = Timestamp::now_utc();
|
let d = Timestamp::now_utc();
|
||||||
let d = d.to_string();
|
let d = d.to_string();
|
||||||
@@ -22,7 +22,7 @@ pub async fn post_request(col: String, text: String, at: String, udid: String, s
|
|||||||
"collection": col.to_string(),
|
"collection": col.to_string(),
|
||||||
"record": {
|
"record": {
|
||||||
"text": at.to_string() + &" ".to_string() + &text.to_string(),
|
"text": at.to_string() + &" ".to_string() + &text.to_string(),
|
||||||
"$type": col.to_string(),
|
"$type": "app.bsky.feed.post",
|
||||||
"createdAt": d.to_string(),
|
"createdAt": d.to_string(),
|
||||||
"facets": [
|
"facets": [
|
||||||
{
|
{
|
||||||
|
@@ -33,7 +33,7 @@ pub async fn post_request(prompt: String) -> String {
|
|||||||
";
|
";
|
||||||
|
|
||||||
let post = Some(json!({
|
let post = Some(json!({
|
||||||
"model": "gpt-4o-mini",
|
"model": "gpt-3.5-turbo",
|
||||||
"messages": [
|
"messages": [
|
||||||
{"role": "system", "content": &setting.to_string()},
|
{"role": "system", "content": &setting.to_string()},
|
||||||
{"role": "user", "content": &prompt.to_string()},
|
{"role": "user", "content": &prompt.to_string()},
|
||||||
|
@@ -12,17 +12,10 @@ pub async fn post_request() -> String {
|
|||||||
.header("Authorization", "Bearer ".to_owned() + &refresh)
|
.header("Authorization", "Bearer ".to_owned() + &refresh)
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.text()
|
||||||
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let status_ref = res.error_for_status_ref();
|
return res;
|
||||||
|
|
||||||
match status_ref {
|
|
||||||
Ok(_) => {
|
|
||||||
return res.text().await.unwrap();
|
|
||||||
}
|
|
||||||
Err(_e) => {
|
|
||||||
let e = "err".to_string();
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -10,8 +10,6 @@ pub async fn post_request(
|
|||||||
link: String,
|
link: String,
|
||||||
cid: String,
|
cid: String,
|
||||||
uri: String,
|
uri: String,
|
||||||
cid_root: String,
|
|
||||||
uri_root: String,
|
|
||||||
img: String,
|
img: String,
|
||||||
title: String,
|
title: String,
|
||||||
description: String,
|
description: String,
|
||||||
@@ -51,8 +49,8 @@ pub async fn post_request(
|
|||||||
},
|
},
|
||||||
"reply": {
|
"reply": {
|
||||||
"root": {
|
"root": {
|
||||||
"cid": cid_root.to_string(),
|
"cid": cid.to_string(),
|
||||||
"uri": uri_root.to_string()
|
"uri": uri.to_string()
|
||||||
},
|
},
|
||||||
"parent": {
|
"parent": {
|
||||||
"cid": cid.to_string(),
|
"cid": cid.to_string(),
|
||||||
|
15
test/ai.zsh
15
test/ai.zsh
@@ -8,15 +8,11 @@ case $OSTYPE in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
d=${0:a:h}
|
d=${0:a:h}
|
||||||
|
source $d/env
|
||||||
source $d/env.zsh
|
|
||||||
source $d/refresh.zsh
|
source $d/refresh.zsh
|
||||||
source $d/token.zsh
|
source $d/token.zsh
|
||||||
source $d/reply.zsh
|
source $d/reply.zsh
|
||||||
source $d/notify.zsh
|
source $d/notify.zsh
|
||||||
source $d/notify_cid.zsh
|
|
||||||
source $d/cron.zsh
|
|
||||||
source $d/feed.zsh
|
|
||||||
|
|
||||||
case $1 in
|
case $1 in
|
||||||
refresh|r)
|
refresh|r)
|
||||||
@@ -31,13 +27,4 @@ case $1 in
|
|||||||
notify|n)
|
notify|n)
|
||||||
notify
|
notify
|
||||||
;;
|
;;
|
||||||
cron|c)
|
|
||||||
cron
|
|
||||||
;;
|
|
||||||
cid)
|
|
||||||
cid
|
|
||||||
;;
|
|
||||||
feed)
|
|
||||||
feed
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
function cron() {
|
|
||||||
t=`docker ps |grep aios|grep R`
|
|
||||||
if [ -z "$t" ];then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
docker compose up -d
|
|
||||||
}
|
|
@@ -1,4 +1,3 @@
|
|||||||
#!/bin/zsh
|
#!/bin/bash
|
||||||
|
|
||||||
#ai l $HANDLE -p $PASSWORD -s $HOST
|
exec "$@"
|
||||||
ai bot -a $ADMIN
|
|
||||||
|
34
test/env
Normal file
34
test/env
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
cfg=~/.config/ai/test.json
|
||||||
|
|
||||||
|
if [ ! -f $cfg ] || ! cat $cfg|jq . || [ "`cat $cfg|jq .host`" = "null" ] || [ -z "`cat $cfg`" ];then
|
||||||
|
mkdir -p ~/.config/ai
|
||||||
|
echo server:
|
||||||
|
read host
|
||||||
|
|
||||||
|
echo password:
|
||||||
|
read pass
|
||||||
|
|
||||||
|
echo handle:
|
||||||
|
read handle
|
||||||
|
|
||||||
|
echo "{ \"host\":\"$host\", \"password\":\"$pass\", \"handle\":\"$handle\" }" >> $cfg
|
||||||
|
fi
|
||||||
|
|
||||||
|
host=`cat $cfg|jq -r .host`
|
||||||
|
handle=`cat $cfg|jq -r .handle`
|
||||||
|
pass=`cat $cfg|jq -r .password`
|
||||||
|
date=`date --iso-8601=seconds`
|
||||||
|
|
||||||
|
if [ ! -f $cfg.t ];then
|
||||||
|
$d/token.zsh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $cfg.t ];then
|
||||||
|
token=`cat $cfg.t|jq -r .accessJwt`
|
||||||
|
refresh=`cat $cfg.t|jq -r .refreshJwt`
|
||||||
|
did=`cat $cfg.t|jq -r .did`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d $d/json ];then
|
||||||
|
mkdir -p $d/json
|
||||||
|
fi
|
18
test/env.zsh
18
test/env.zsh
@@ -1,18 +0,0 @@
|
|||||||
cfg=~/.config/ai/test.json
|
|
||||||
|
|
||||||
if [ -f $cfg ];then
|
|
||||||
host=`cat $cfg|jq -r .host`
|
|
||||||
handle=`cat $cfg|jq -r .handle`
|
|
||||||
pass=`cat $cfg|jq -r .password`
|
|
||||||
date=`date --iso-8601=seconds`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f $cfg.t ];then
|
|
||||||
token=`cat $cfg.t|jq -r .accessJwt`
|
|
||||||
refresh=`cat $cfg.t|jq -r .refreshJwt`
|
|
||||||
did=`cat $cfg.t|jq -r .did`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d $d/json ];then
|
|
||||||
mkdir -p $d/json
|
|
||||||
fi
|
|
@@ -1,5 +0,0 @@
|
|||||||
function feed(){
|
|
||||||
token=`cat ~/.config/ai/token.json|jq -r .accessJwt`
|
|
||||||
url=at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.generator/cmd
|
|
||||||
curl -sL "https://public.api.bsky.app/xrpc/app.bsky.feed.getFeed?feed=$url" -H "Authorization: Bearer $token"
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
function cid(){
|
|
||||||
dd=${d:h}
|
|
||||||
ai=$dd/target/debug/ai
|
|
||||||
txt=$dd/.config/ai/txt
|
|
||||||
f=$txt/notify_cid
|
|
||||||
if [ ! -f $ai ];then
|
|
||||||
cd $dd
|
|
||||||
cargo build
|
|
||||||
fi
|
|
||||||
if [ ! -d $txt ];then
|
|
||||||
mkdir -p $txt
|
|
||||||
fi
|
|
||||||
$ai n|jq -r ".[]|.[]?.cid" >> $f.txt
|
|
||||||
cp -rf $f.txt ${f}_run.txt
|
|
||||||
}
|
|
@@ -1,16 +1,4 @@
|
|||||||
function token() {
|
function token() {
|
||||||
mkdir -p ~/.config/ai
|
|
||||||
echo server:
|
|
||||||
read host
|
|
||||||
|
|
||||||
echo password:
|
|
||||||
read pass
|
|
||||||
|
|
||||||
echo handle:
|
|
||||||
read handle
|
|
||||||
|
|
||||||
echo "{ \"host\":\"$host\", \"password\":\"$pass\", \"handle\":\"$handle\" }" >> $cfg
|
|
||||||
|
|
||||||
url=https://$host/xrpc/com.atproto.server.createSession
|
url=https://$host/xrpc/com.atproto.server.createSession
|
||||||
j=`curl -sL -X POST -H "Content-Type: application/json" -d "{\"identifier\":\"$handle\",\"password\":\"$pass\"}" $url`
|
j=`curl -sL -X POST -H "Content-Type: application/json" -d "{\"identifier\":\"$handle\",\"password\":\"$pass\"}" $url`
|
||||||
echo $j
|
echo $j
|
||||||
|
Reference in New Issue
Block a user