From 1083db296869fdf6cbb9b4ac1739b62f21428920 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Sun, 12 May 2024 16:07:15 +0200 Subject: More WIP --- .gitignore | 1 + connect.sh | 10 ++++------ events.sh | 22 ++++++++++++++++++++++ example/.gitignore | 1 + example/env-example.sh | 3 +++ example/simple.sh | 24 +++++++++++++++++++++--- load.sh | 2 ++ rest.sh | 3 +++ 8 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 events.sh create mode 100644 example/.gitignore create mode 100644 example/env-example.sh create mode 100644 rest.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..397b4a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/connect.sh b/connect.sh index 73d45ba..40b66da 100644 --- a/connect.sh +++ b/connect.sh @@ -73,14 +73,12 @@ atrocity_loop() { atrocity_debug "Atrocity loop started before connection has been set up" exit 1 fi - atrocity_debug "Loop started" + atrocity_debug "Read loop started" while true; do local line local operator - atrocity_debug "Trying to read line" if read -r line; then - atrocity_debug "Reading message from discord: $line" - + echo "$line" >>raw_receive.log printf %s "$line" | jq 'if .s then .s else '"$(atrocity_sequence_get)"' end' >"$ATROCITY_SESSION"/sequence operator="$(printf %s "$line" | jq .op)" case "$operator" in @@ -91,10 +89,10 @@ atrocity_loop() { 10) # Hello atrocity_debug "Sending hello" echo "$(($(printf "%s" "$line" | jq -r .d.heartbeat_interval) / 1000))" >"$ATROCITY_SESSION"/heartbeat-interval - atrocity_gateway_send_raw '{"op":2,"d":{"token":"'$ATROCITY_TOKEN'", "properties":{"os":"linux","browser":"bash","device":"bash"},"presence":{"status":"online","afk":false, "activities":[{"type":0,"name":"Being coded in Bash"}]}, "intents":33287}}' + atrocity_gateway_send_raw '{"op":2,"d":{"token":"'$ATROCITY_TOKEN'", "properties":{"os":"linux","browser":"bash","device":"bash"},"presence":{"status":"online","afk":false, "activities":[{"type":0,"name":"Being coded in Bash"}]}, "intents":4609}}' ;; 0) # Dispatch - atrocity_dispatch "$line" + atrocity_on_dispatch "$line" ;; 1) # Heartbeat atrocity_heartbeat diff --git a/events.sh b/events.sh new file mode 100644 index 0000000..6704def --- /dev/null +++ b/events.sh @@ -0,0 +1,22 @@ +atrocity_on_dispatch() { + local event + event="$(printf '%s' "$1" | jq -r .t)" + atrocity_on_event "$event" "$(printf '%s' "$1" | jq .d)" +} + +atrocity_on_event() { + atrocity_on_default_event "$1" "$2" +} +atrocity_on_default_event() { + local handler + handler="atrocity_on_$1" + if declare -F "$handler" >/dev/null; then + "$handler" "$2" + else + atrocity_on_unknown "$1" "$2" + fi +} + +atrocity_on_unknown() { + noop +} diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 0000000..137e678 --- /dev/null +++ b/example/.gitignore @@ -0,0 +1 @@ +env.sh diff --git a/example/env-example.sh b/example/env-example.sh new file mode 100644 index 0000000..be6e59c --- /dev/null +++ b/example/env-example.sh @@ -0,0 +1,3 @@ +# Copy this file to env.sh and place your configuration in here + +export ATROCITY_TOKEN="MzEy.............................................................." diff --git a/example/simple.sh b/example/simple.sh index c90c451..a756ee4 100755 --- a/example/simple.sh +++ b/example/simple.sh @@ -1,12 +1,30 @@ #!/usr/bin/env bash +source "$(dirname -- "$0")"/env.sh source "$(dirname -- "$0")"/../load.sh atrocity_debug Simple example loaded +atrocity_on_GUILD_CREATE() { + atrocity_debug "Guild: $(echo "$1" | jq -r .name)" +} +atrocity_on_unknown() { + atrocity_debug "Unknown event $1" +} +atrocity_on_MESSAGE_CREATE() { + local content + local channel + content="$(echo "$1" | jq -r .content)" + channel="$(echo "$1" | jq -r .channel_id)" -export ATROCITY_TOKEN="MzEyMjU2ODcxMTc0MTExMjMz.GPe_v6.4Acwm7tje3sMEvUu05NPyQrZalh8knTIHPgLmk" + if [[ "$(echo "$1" | jq -r .author.bot)" = "true" ]]; then + return + fi + atrocity_debug "Found message with content $content" -atrocity_dispatch() { - echo "Dispatching $1" + case "$content" in + \!ping) + atrocity_rest POST /channels/"$channel"/messages '{"content": "Pong", "embeds": [{"title": "Pong", "description": "You have been ponginated"}]}' + ;; + esac } atrocity_connect diff --git a/load.sh b/load.sh index 7e7f0af..3deaab6 100644 --- a/load.sh +++ b/load.sh @@ -6,7 +6,9 @@ fi _atrocity_base="$(dirname -- "$(readlink -f -- _atrocity_init_file)")" source "$_atrocity_base"/logger.sh +source "$_atrocity_base"/events.sh source "$_atrocity_base"/connect.sh +source "$_atrocity_base"/rest.sh atrocity_debug "Loaded atrocity from $_atrocity_base" _atrocity_prepare diff --git a/rest.sh b/rest.sh new file mode 100644 index 0000000..e4824d8 --- /dev/null +++ b/rest.sh @@ -0,0 +1,3 @@ +atrocity_rest() { + curl -X "$1" "https://discord.com/api/v10/$2" -H "authorization: Bot $ATROCITY_TOKEN" -H "content-type: application/json" --data "$3" 2>/dev/null +} -- cgit