Add reworked script
This commit is contained in:
96
bluesky-telegram.sh
Normal file
96
bluesky-telegram.sh
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
PDSHOST=""
|
||||
BLUESKY_HANDLE=""
|
||||
BLUESKY_PASSWORD=""
|
||||
CONVO_ID=""
|
||||
CHAT_ID=""
|
||||
TOKEN=""
|
||||
|
||||
WORKING_DIR="$(pwd)"
|
||||
TOKEN_FILE="$WORKING_DIR/token.json"
|
||||
ACCESS_JWT=$(cat "${TOKEN_FILE}" | jq -r .ACCESS_JWT)
|
||||
REFRESH_JWT=$(cat "${TOKEN_FILE}" | jq -r .REFRESH_JWT)
|
||||
MESSAGE_FILE="$WORKING_DIR/bluesky.json"
|
||||
LAST_ID="$WORKING_DIR/last_id.txt"
|
||||
|
||||
# Create a new session
|
||||
create_session() {
|
||||
curl -sX POST "${PDSHOST}/xrpc/com.atproto.server.createSession" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"identifier": "'"${BLUESKY_HANDLE}"'", "password": "'"${BLUESKY_PASSWORD}"'"}' \
|
||||
| jq '{ACCESS_JWT: .accessJwt, REFRESH_JWT: .refreshJwt}' \
|
||||
> "${TOKEN_FILE}"
|
||||
}
|
||||
|
||||
# Retrieve conversation ID
|
||||
get_messages() {
|
||||
curl -s "https://api.bsky.chat/xrpc/chat.bsky.convo.listConvos?limit=50" \
|
||||
-H "Authorization: Bearer ${ACCESS_JWT}" | jq -r '.convos[0].id'
|
||||
}
|
||||
|
||||
# Refresh session (token)
|
||||
refresh_session() {
|
||||
curl -sX POST "${PDSHOST}/xrpc/com.atproto.server.refreshSession" \
|
||||
-H "Authorization: Bearer ${REFRESH_JWT}" | jq '{ACCESS_JWT: .accessJwt, REFRESH_JWT: .refreshJwt}' \
|
||||
> "${TOKEN_FILE}"
|
||||
}
|
||||
|
||||
# Retrieve session status
|
||||
get_session() {
|
||||
curl -sX GET "${PDSHOST}/xrpc/com.atproto.server.getSession" \
|
||||
-H "Authorization: Bearer ${ACCESS_JWT}" | jq -r .active
|
||||
}
|
||||
|
||||
# Retrieve last message (message ID, URI, Handle)
|
||||
get_message() {
|
||||
curl -sX GET https://api.bsky.chat/xrpc/chat.bsky.convo.getConvo?convoId="${CONVO_ID}" \
|
||||
-H "Authorization: Bearer ${ACCESS_JWT}" \
|
||||
| jq '{message_id: .convo.lastMessage.id, uri: .convo.lastMessage.embed.record.uri, handle: .convo.lastMessage.embed.record.author.handle}' \
|
||||
> "${MESSAGE_FILE}"
|
||||
}
|
||||
|
||||
#####
|
||||
|
||||
# Retrieve token if missing
|
||||
while true; do
|
||||
if [[ -z "${ACCESS_TOKEN}" ]]; then
|
||||
echo "Token ist leer, erstelle Session."
|
||||
create_session
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Start function if provided as argument
|
||||
if [[ -n $1 ]]; then
|
||||
$1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check session status
|
||||
session_active=$(get_session)
|
||||
if [[ "${session_active}" = "true" ]]; then
|
||||
echo "Session ist aktiv."
|
||||
else
|
||||
refresh_session
|
||||
fi
|
||||
|
||||
# Retrieve message
|
||||
get_message
|
||||
|
||||
# Create URL
|
||||
id=$(cat "${MESSAGE_FILE}" | jq -r .message_id)
|
||||
uri=$(cat "${MESSAGE_FILE}" | jq -r '(.uri | split("/")[-1])')
|
||||
handle=$(cat "${MESSAGE_FILE}" | jq -r .handle)
|
||||
|
||||
# Check if message has already been sent
|
||||
if [[ $(cat "${LAST_ID}") != "${id}" ]]; then
|
||||
|
||||
# Send URL to Telegram bot
|
||||
url="https://bsky.app/profile/${handle}/post/${uri}"
|
||||
|
||||
# If send sucessfully save message ID
|
||||
if curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" -d chat_id="${CHAT_ID}" -d text="$url"; then
|
||||
echo "${id}" > "${LAST_ID}"
|
||||
fi
|
||||
fi
|
Reference in New Issue
Block a user