summaryrefslogtreecommitdiff
path: root/forgebot_proper.sh
blob: 676803dc0879d0288403799f7a2c9433faa0c562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash
[[ -f "$(dirname -- "$0")"/env.sh ]] && source "$(dirname -- "$0")"/env.sh
if [[ x"$ATROCITY_TOKEN" == x ]]; then
  echo "Please set ATROCITY_TOKEN to your discord token"
  exit 1
fi
if [[ x"$HYPIXEL_KEY" == x ]]; then
  echo "Please set HYPIXEL_KEY to your hypixel api key"
  exit 1
fi
source "$(dirname -- "$0")"/atrocity/load.sh
source "$(dirname -- "$0")"/hypixel_api.sh

find_option() {
  # Usage: find_option <data> <name>
  printf '%s' "$1" | jq -r '.data.options[] | select(.name == "'"$2"'")| .value'
}

atrocity_on_INTERACTION_CREATE() {
  local type
  type="$(printf '%s' "$1" | jq -r .type)"
  #PING	1
  #APPLICATION_COMMAND	2
  #MESSAGE_COMPONENT	3
  #APPLICATION_COMMAND_AUTOCOMPLETE	4
  #MODAL_SUBMIT	5
  id=$(printf '%s' "$1" | jq -r .id)
  token=$(printf '%s' "$1" | jq -r .token)
  atrocity_debug Processing interaction with id $id and token $token of type $type
  if [[ $type == 2 ]]; then
    command_name=$(printf '%s' "$1" | jq -r .data.name)
    atrocity_debug Executing command $command_name
    if [[ $command_name == register ]]; then
      username="$(find_option "$1" username)"
      atrocity_debug "Registering user with name $username"
      # TODO first acc then edit
      minecraft_uuid="$(curl "https://mowojang.matdoes.dev/$username" 2>/dev/null | jq -r .id)"
      atrocity_debug "Got uuid: $minecraft_uuid"
      hypixel_profiles="$(get_profiles_by_uuid "$minecraft_uuid")"
      components="$(printf '%s' "$hypixel_profiles" | jq -r '[[.profiles[] | ({"type": 2, "label": .cute_name, "style": 1, "custom_id": (.profile_id + " '"$minecraft_uuid"'")})]|_nwise(3)|{"type": 1, "components": .}]')" # Frucht emoji pro profile
      atrocity_rest POST "interactions/$id/$token/callback" "$(cat << EOF
{
  "type": 4,
  "data": {
    "content": "Trying to register with name \`$username\` and uuid \`$minecraft_uuid\`",
    "components": $components
  }
}
EOF
      )"
    fi
  fi
  if [[ $type == 3 ]]; then
    atrocity_debug "$1"
    custom_id=($(printf '%s' "$1" | jq -r .data.custom_id))
    profile_id=${custom_id[0]}
    minecraft_id=${custom_id[1]}
    user_id="$(printf '%s' "$1" | jq -r .member.user.id)"
    atrocity_debug "Profile: $profile_id, Minecraft: $minecraft_id, User: $user_id"
  fi
}
atrocity_on_unknown() {
  atrocity_debug "Skipping event $1"
}
atrocity_on_READY() {
  atrocity_debug "Payload: $1"
  user_id="$(printf '%s' "$1" | jq -r .user.id)"
  atrocity_debug "user id: $user_id"

  atrocity_rest POST applications/"$user_id"/${GUILD_EXTRA}commands "$(cat << 'EOF'
{
  "name": "register",
  "type": 1,
  "description": "Register a profile to be watched by the forge bot",
  "options": [
    {
      "name": "username",
      "description": "The Minecraft user name you want to watch",
      "type": 3
    }
  ]
}
EOF
  )"
}


atrocity_connect
atrocity_loop