teamspeak-query-lib/ts-control

147 lines
3.3 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
2023-11-13 16:01:23 +00:00
2023-11-27 19:24:38 +00:00
actions="quick
move
2023-11-17 16:32:15 +00:00
fetch-client
fetch-channel
away
not away
2023-11-26 21:40:41 +00:00
back
message
message-user
2024-09-27 14:16:21 +00:00
events
ntfy-events"
2023-11-26 21:40:41 +00:00
_ts_control_get_entity() {
entity=$(_ts_control_single_or_dmenu "$(teamspeak-query-lib "$1s")" "$2")
2023-11-26 21:40:41 +00:00
if [ -z "$entity" ]; then
exit 1
fi
echo "$entity"
}
2023-11-13 16:01:23 +00:00
2023-11-26 21:40:41 +00:00
_ts_control_get_message() {
if [ -n "$1" ];
then
message="$1"
else
message=$(printf "\n" | $DMENU -p "message")
fi
2023-11-26 21:40:41 +00:00
if [ -z "$message" ]; then
exit 1
fi
2023-11-26 21:40:41 +00:00
echo "$message"
}
_ts_control_move_self() {
channel=$(_ts_control_get_entity channel "$1" "$2")
teamspeak-query-lib move --strict-channel "$channel"
2023-11-13 16:01:23 +00:00
}
2023-11-26 21:30:59 +00:00
_ts_control_fetch() {
target=$(_ts_control_get_entity "$1" "$2")
2023-11-26 21:40:41 +00:00
teamspeak-query-lib fetch "--strict-$1" "--$1" "$target"
2023-11-17 16:32:15 +00:00
}
_ts_control_single_or_dmenu() {
options=$(echo "$1" | grep "$2")
count=$(echo "$options" | wc -l)
if [ "$count" -eq 1 ]; then
echo "$options"
else
echo "$options" | $DMENU
fi
}
2024-09-27 14:16:21 +00:00
handle_ntfy_events() {
while read -r data; do
msg=$(echo "$data" | jq -r --unbuffered '.message')
type=$(echo "$data" | jq -r --unbuffered '.type')
mode=$(echo "$data" | jq -r --unbuffered '.params.targetmode')
echo "$data"
if [ "$type" = "NotifyTextMessage" ] && [ "$mode" != "1" ]; then
continue # Skip all messages that are not direct messages
fi
friendly_type="Event"
case $type in
"NotifyClientPoke")
friendly_type="Poke"
;;
"NotifyTextMessage")
friendly_type="Message"
;;
esac
echo "($friendly_type) $target: $msg"
curl -sSL \
-H "Authorization: Bearer $TS3_NTFY_TOKEN" \
-d "{
\"topic\": \"$TS3_NTFY_TOPIC\",
\"message\": \"$msg\",
\"title\": \"TS3 $friendly_type\"
}" \
"$TS3_NTFY_HOST"
done
}
# Add '$' to $1 to add 'End of line' to the regex for grep
action=$(_ts_control_single_or_dmenu "$actions" "$1$")
2023-11-13 16:01:23 +00:00
case $action in
2023-11-27 19:24:38 +00:00
"quick")
action=$($DMENU < "$XDG_CONFIG_HOME/ts-control-quick")
if [ -z "$action" ]; then
exit 1
fi
eval "$0 $action"
2023-11-27 19:24:38 +00:00
;;
2023-11-13 16:01:23 +00:00
"move")
_ts_control_move_self "$2"
;;
2023-11-17 16:32:15 +00:00
"fetch-client")
_ts_control_fetch client "$2"
2023-11-17 16:32:15 +00:00
;;
"fetch-channel")
_ts_control_fetch channel "$2"
;;
"not away")
teamspeak-query-lib move "Not Away From Keyboard"
teamspeak-query-lib update --microphone=false --speakers=false
2023-11-13 16:01:23 +00:00
;;
"away")
2023-11-26 21:40:41 +00:00
message=$(_ts_control_get_message)
2023-11-13 16:01:23 +00:00
teamspeak-query-lib move "Away From Keyboard"
teamspeak-query-lib update --away "$message"
teamspeak-query-lib update --microphone=false --speakers=false --away "$message"
;;
"back")
teamspeak-query-lib update --back
_ts_control_move_self "$2"
2023-11-13 16:01:23 +00:00
teamspeak-query-lib update --microphone=true --speakers=true
;;
2023-11-26 21:40:41 +00:00
"message")
message=$(_ts_control_get_message "$2")
2023-11-26 21:40:41 +00:00
teamspeak-query-lib message "$message"
;;
"message-user")
user=$(_ts_control_get_entity client "$2")
message=$(_ts_control_get_message "$3")
2023-11-26 21:40:41 +00:00
teamspeak-query-lib message --strict-client --client "$user" "$message"
;;
"events")
2024-06-02 23:39:37 +00:00
teamspeak-query-lib events --filter=others NotifyClientMoved NotifyClientEnterView NotifyClientLeftView NotifyTextMessage NotifyClientPoke \
| jq -r --unbuffered '.message' \
| tee >(xargs -I{} notify-send "TS3 Event" "{}")
2024-09-27 14:16:21 +00:00
;;
"ntfy-events")
teamspeak-query-lib events --filter=others NotifyClientPoke NotifyTextMessage \
| handle_ntfy_events
;;
2023-11-13 16:01:23 +00:00
esac