aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Lisina <sekoohaka.sarisan@gmail.com>2025-06-22 01:28:58 +0500
committerMaria Lisina <sekoohaka.sarisan@gmail.com>2025-06-22 01:28:58 +0500
commitac2576b5af83f68f1d5f83a6b8d38ef463185c59 (patch)
treeafe6a0a026bc736cca874912c287465916b7a339
parent3fd621be134f71a4638b0aea2070116e9c5caf1e (diff)
bot: Workaround TLS/SSL timeout error
Signed-off-by: Maria Lisina <sekoohaka.sarisan@gmail.com>
-rw-r--r--README.md1
-rw-r--r--auth/donmai.zsh6
-rw-r--r--auth/idolcomplex.zsh18
-rw-r--r--auth/moebooru.zsh6
-rw-r--r--auth/sankakuchannel.zsh6
-rwxr-xr-xbot.zsh47
-rw-r--r--modules/callback.zsh12
-rw-r--r--modules/commands.zsh6
-rw-r--r--modules/inline.zsh6
-rw-r--r--submodules/callback_delete.zsh6
-rw-r--r--submodules/command_original.zsh12
-rw-r--r--submodules/command_ping.zsh12
-rw-r--r--units/ib_file.zsh6
-rw-r--r--units/ib_size.zsh6
-rw-r--r--units/sn_auth.zsh6
-rw-r--r--units/sn_get.zsh12
-rw-r--r--units/sn_search.zsh6
17 files changed, 148 insertions, 26 deletions
diff --git a/README.md b/README.md
index 101bfdb..e6d95f9 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,7 @@ Options:
-i <secs> Telegram Bot API connetion timeout, max: 10, default: 10 secs
-e <secs> Image Boards API connetion timeout, max: 10, default: 5 secs
-d <secs> Head request connetion timeout, max: 10, default: 2 secs
+ -f <secs> Connrefused timeout, max: 2, default: none
-n <addr> Proxy server for Telegram Bot API
-x <addr> Proxy server for Image Boards API
diff --git a/auth/donmai.zsh b/auth/donmai.zsh
index 8bc04a8..5be8255 100644
--- a/auth/donmai.zsh
+++ b/auth/donmai.zsh
@@ -5,10 +5,14 @@
ib_auth_file="${cache}/${update_id}_profile.json"
dump+=(${ib_auth_file##*/})
-if ! curl --max-time ${external_timeout} \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --max-time ${external_timeout} \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
--request GET \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user "${ib_login}:${ib_key}" \
--user-agent "${useragent}" \
diff --git a/auth/idolcomplex.zsh b/auth/idolcomplex.zsh
index 3112514..c9a5986 100644
--- a/auth/idolcomplex.zsh
+++ b/auth/idolcomplex.zsh
@@ -6,11 +6,15 @@ ib_cookies="${cookies_file}"
ib_auth_file="${cache}/${update_id}_login.html"
dump+=(${ib_auth_file##*/})
-if ! curl --cookie-jar "${ib_cookies}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --cookie-jar "${ib_cookies}" \
--max-time ${external_timeout} \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
--request GET \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_auth}/users/login"
@@ -41,7 +45,8 @@ fi
ib_auth_file="${cache}/${update_id}_authenticate.html"
dump+=(${ib_auth_file##*/})
-if ! curl --cookie "${ib_cookies}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --cookie "${ib_cookies}" \
--cookie-jar "${ib_cookies}" \
--data-urlencode "authenticity_token=${ib_token}" \
--data-urlencode "user[name]=${ib_login}" \
@@ -52,6 +57,9 @@ if ! curl --cookie "${ib_cookies}" \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
--request POST \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_auth}${ib_action}"
@@ -79,11 +87,15 @@ fi
ib_auth_file="${cache}/${update_id}_home.html"
dump+=(${ib_auth_file##*/})
-if ! curl --cookie "${ib_cookies}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --cookie "${ib_cookies}" \
--max-time ${external_timeout} \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
--request GET \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_auth}/users/home"
diff --git a/auth/moebooru.zsh b/auth/moebooru.zsh
index c3a893d..c67fddc 100644
--- a/auth/moebooru.zsh
+++ b/auth/moebooru.zsh
@@ -5,12 +5,16 @@
ib_auth_file="${cache}/${update_id}_user.json"
dump+=(${ib_auth_file##*/})
-if ! curl --data-urlencode "username=${ib_login}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "username=${ib_login}" \
--data-urlencode "api_key=${ib_key}" \
--get \
--max-time ${external_timeout} \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_auth}/user.json"
diff --git a/auth/sankakuchannel.zsh b/auth/sankakuchannel.zsh
index 86f076a..8425cc7 100644
--- a/auth/sankakuchannel.zsh
+++ b/auth/sankakuchannel.zsh
@@ -10,12 +10,16 @@ ib_login_data="$(jq --null-input --compact-output \
ib_auth_file="${cache}/${update_id}_token.json"
dump+=(${ib_auth_file##*/})
-if ! curl --data "${ib_login_data}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data "${ib_login_data}" \
--header "Content-Type: application/json" \
--max-time ${external_timeout} \
--output "${ib_auth_file}" \
--proxy "${external_proxy}" \
--request POST \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_auth}/auth/token"
diff --git a/bot.zsh b/bot.zsh
index e98b52c..a633dec 100755
--- a/bot.zsh
+++ b/bot.zsh
@@ -63,7 +63,7 @@ busybox=(
if [[ -n "${1}" ]]
then
- while getopts ha:lg:r:m:t:s:cjqui:e:d:n:x: opts
+ while getopts ha:lg:r:m:t:s:cjqui:e:d:f:n:x: opts
do
case "${opts}" in
(h)
@@ -111,6 +111,9 @@ then
(d)
head_timeout=${OPTARG}
;;
+ (f)
+ connrefused_timeout=${OPTARG}
+ ;;
(n)
internal_proxy="${OPTARG}"
;;
@@ -150,6 +153,7 @@ then
"\n -i <secs>\tTelegram Bot API connetion timeout, max: 10, default: 10 secs" \
"\n -e <secs>\tImage Boards API connetion timeout, max: 10, default: 5 secs" \
"\n -d <secs>\tHead request connetion timeout, max: 10, default: 2 secs" \
+ "\n -f <secs>\tConnrefused timeout, max: 2, default: none" \
"\n -n <addr>\tProxy server for Telegram Bot API" \
"\n -x <addr>\tProxy server for Image Boards API" \
"\n\nCache modes:" \
@@ -353,6 +357,23 @@ else
head_timeout=2
fi
+if [[ -n "${connrefused_timeout}" ]]
+then
+ if ! test ${connrefused_timeout} -gt 0
+ then
+ echo "Illegal connrefused timeout" \
+ "\nSee '${0} -h'"
+ exit 1
+ fi
+
+ if [[ ${connrefused_timeout} -gt 2 ]]
+ then
+ connrefused_timeout=2
+ fi
+else
+ connrefused_timeout=0
+fi
+
if [[ -n "${1}" ]]
then
api_token="${1}"
@@ -413,11 +434,15 @@ then
. "${units}/log.zsh"
elif [[ "${api_address}" = "${local_address}" ]]
then
- if ! curl --data "user_id=${api_token%:*}" \
+ if ! curl --connect-timeout ${connrefused_timeout} \
+ --data "user_id=${api_token%:*}" \
--get \
--max-time ${internal_timeout} \
--output "${cache}/getUserProfilePhotos.json" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/getUserProfilePhotos"
@@ -461,11 +486,15 @@ then
exit 1
fi
- if ! curl --data-urlencode "file_id=${profilephoto}" \
+ if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "file_id=${profilephoto}" \
--get \
--max-time ${internal_timeout} \
--output "${cache}/getFile.json" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/getFile"
@@ -514,10 +543,14 @@ fi
log_text="PID: ${$}"
. "${units}/log.zsh"
-if ! curl --get \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --get \
--max-time ${internal_timeout} \
--output "${cache}/getMe.json" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/getMe"
@@ -557,10 +590,14 @@ log_text="Bot: ${username}"
while trap 'wait && exit 0' INT TERM
do
- if ! curl --data "offset=${offset}" \
+ if ! curl --connect-timeout ${connrefused_timeout} \
+ --data "offset=${offset}" \
--get \
--output "${cache}/getUpdates.json" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/getUpdates"
diff --git a/modules/callback.zsh b/modules/callback.zsh
index 1fc18fc..15d7f60 100644
--- a/modules/callback.zsh
+++ b/modules/callback.zsh
@@ -57,7 +57,8 @@ then
output_file="${cache}/${update_id}_editMessageText.json"
dump+=(${output_file##*/})
- if ! curl --data-urlencode "chat_id=${chat_id}" \
+ if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_id=${message_id}" \
--data-urlencode "inline_message_id=${inline_message_id}" \
--data-urlencode "text=${output_text}" \
@@ -68,6 +69,9 @@ then
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/editMessageText"
@@ -108,13 +112,17 @@ fi
output_file="${cache}/${update_id}_answerCallbackQuery.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "callback_query_id=${query_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "callback_query_id=${query_id}" \
--data-urlencode "text=${notification_text}" \
--data-urlencode "cache_time=0" \
--get \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/answerCallbackQuery"
diff --git a/modules/commands.zsh b/modules/commands.zsh
index e945298..3e553d2 100644
--- a/modules/commands.zsh
+++ b/modules/commands.zsh
@@ -81,7 +81,8 @@ esac
output_file="${cache}/${update_id}_sendMessage.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_thread_id=${message_thread_id}" \
--data-urlencode "text=${output_text}" \
--data-urlencode "parse_mode=HTML" \
@@ -92,6 +93,9 @@ if ! curl --data-urlencode "chat_id=${chat_id}" \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/sendMessage"
diff --git a/modules/inline.zsh b/modules/inline.zsh
index 11d4b3b..63e9666 100644
--- a/modules/inline.zsh
+++ b/modules/inline.zsh
@@ -53,7 +53,8 @@ esac
output_file="${cache}/${update_id}_answerInlineQuery.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "inline_query_id=${query_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "inline_query_id=${query_id}" \
--data-urlencode "results=${results}" \
--data-urlencode "cache_time=0" \
--data-urlencode "next_offset=${next_offset}" \
@@ -61,6 +62,9 @@ if ! curl --data-urlencode "inline_query_id=${query_id}" \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/answerInlineQuery"
diff --git a/submodules/callback_delete.zsh b/submodules/callback_delete.zsh
index ca5e356..99a77c6 100644
--- a/submodules/callback_delete.zsh
+++ b/submodules/callback_delete.zsh
@@ -8,12 +8,16 @@ message_id="$(jq -r '.callback_query.message.message_id' "${update}")"
output_file="${cache}/${update_id}_deleteMessage.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_id=${message_id}" \
--get \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/deleteMessage"
diff --git a/submodules/command_original.zsh b/submodules/command_original.zsh
index 59e2077..652199a 100644
--- a/submodules/command_original.zsh
+++ b/submodules/command_original.zsh
@@ -37,13 +37,17 @@ fi
output_file="${cache}/${update_id}_sendChatAction.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_thread_id=${message_thread_id}" \
--data-urlencode "action=upload_document" \
--get \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/sendChatAction"
@@ -80,7 +84,8 @@ fi
output_file="${cache}/${update_id}_sendDocument.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_thread_id=${message_thread_id}" \
--data-urlencode "document=${ib_file_url}" \
--data-urlencode "thumbnail=${ib_preview_url}" \
@@ -90,6 +95,9 @@ if ! curl --data-urlencode "chat_id=${chat_id}" \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/sendDocument"
diff --git a/submodules/command_ping.zsh b/submodules/command_ping.zsh
index 0ebb2b6..adcff25 100644
--- a/submodules/command_ping.zsh
+++ b/submodules/command_ping.zsh
@@ -8,7 +8,8 @@ dump+=(${output_file##*/})
latency_init=$(strftime %s%N)
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_thread_id=${message_thread_id}" \
--data-urlencode "text=${output_text}" \
--data-urlencode "reply_parameters=${reply_parameters}" \
@@ -16,6 +17,9 @@ if ! curl --data-urlencode "chat_id=${chat_id}" \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/sendMessage"
@@ -69,7 +73,8 @@ output_text="$(printf "<b>Latency:</b> %ums" "${latency}")"
output_file="${cache}/${update_id}_editMessageText.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "chat_id=${chat_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "chat_id=${chat_id}" \
--data-urlencode "message_id=${message_id}" \
--data-urlencode "text=${output_text}" \
--data-urlencode "parse_mode=HTML" \
@@ -77,6 +82,9 @@ if ! curl --data-urlencode "chat_id=${chat_id}" \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((internal_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/editMessageText"
diff --git a/units/ib_file.zsh b/units/ib_file.zsh
index ecdc545..cb526b8 100644
--- a/units/ib_file.zsh
+++ b/units/ib_file.zsh
@@ -50,7 +50,8 @@ fi
rm -f "${ib_file}"
-if ! curl --cookie "${ib_cookies}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --cookie "${ib_cookies}" \
--data-urlencode "${ib_dfield1}" \
--data-urlencode "${ib_dfield2}" \
--data-urlencode "${ib_dfield3}" \
@@ -65,6 +66,9 @@ if ! curl --cookie "${ib_cookies}" \
--max-time ${external_timeout} \
--output "${ib_file}" \
--proxy "${external_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_data_url}"
diff --git a/units/ib_size.zsh b/units/ib_size.zsh
index 5e1506f..762c801 100644
--- a/units/ib_size.zsh
+++ b/units/ib_size.zsh
@@ -12,9 +12,13 @@ then
return 0
fi
-ib_file_size="$(curl --head \
+ib_file_size="$(curl --connect-timeout ${connrefused_timeout} \
+ --head \
--max-time ${head_timeout} \
--proxy "${external_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${ib_file_url}" |
diff --git a/units/sn_auth.zsh b/units/sn_auth.zsh
index 1315208..ab75ddd 100644
--- a/units/sn_auth.zsh
+++ b/units/sn_auth.zsh
@@ -17,12 +17,16 @@ fi
sn_file="${cache}/${update_id}_search.json"
dump+=(${sn_file##*/})
-if ! curl --data-urlencode "output_type=2" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "output_type=2" \
--data-urlencode "api_key=${sn_key}" \
--get \
--max-time ${external_timeout} \
--output "${sn_file}" \
--proxy "${external_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"https://saucenao.com/search.php"
diff --git a/units/sn_get.zsh b/units/sn_get.zsh
index 4d55351..9e99e9c 100644
--- a/units/sn_get.zsh
+++ b/units/sn_get.zsh
@@ -20,11 +20,15 @@ fi
output_file="${cache}/${update_id}_getFile.json"
dump+=(${output_file##*/})
-if ! curl --data-urlencode "file_id=${file_id}" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --data-urlencode "file_id=${file_id}" \
--get \
--max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/bot${api_token}/getFile"
@@ -74,9 +78,13 @@ then
output_file="${cache}/${update_id}_file.jpg"
dump+=(${output_file##*/})
- if ! curl --max-time ${internal_timeout} \
+ if ! curl --connect-timeout ${connrefused_timeout} \
+ --max-time ${internal_timeout} \
--output "${output_file}" \
--proxy "${internal_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"${api_address}/file/bot${api_token}/${file_path}"
diff --git a/units/sn_search.zsh b/units/sn_search.zsh
index 4f1e64c..77af268 100644
--- a/units/sn_search.zsh
+++ b/units/sn_search.zsh
@@ -5,7 +5,8 @@
sn_file="${cache}/${update_id}_search.json"
dump+=(${sn_file##*/})
-if ! curl --form "output_type=2" \
+if ! curl --connect-timeout ${connrefused_timeout} \
+ --form "output_type=2" \
--form "api_key=${sn_key}" \
--form "dbs[]=9" \
--form "dbs[]=12" \
@@ -19,6 +20,9 @@ if ! curl --form "output_type=2" \
--max-time ${external_timeout} \
--output "${sn_file}" \
--proxy "${external_proxy}" \
+ --retry 1 \
+ --retry-connrefused \
+ --retry-max-time $((external_timeout - connrefused_timeout)) \
--silent \
--user-agent "${useragent}" \
"https://saucenao.com/search.php"