aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Lisina <sekoohaka.sarisan@gmail.com>2025-05-16 15:44:01 +0500
committerMaria Lisina <sekoohaka.sarisan@gmail.com>2025-05-16 15:44:01 +0500
commita9a802d493cda6d96576e6febf3608896b670125 (patch)
treecfa22a067963ece73546eb4593a29c7214a906d9
parent5620434c22a4f2c218f9cdfa5482e3a876d0e49d (diff)
bot: Add ping command
Signed-off-by: Maria Lisina <sekoohaka.sarisan@gmail.com>
-rw-r--r--README.md1
-rw-r--r--files/help.txt.default1
-rw-r--r--modules/commands.sh3
-rw-r--r--submodules/command_ping.sh117
4 files changed, 122 insertions, 0 deletions
diff --git a/README.md b/README.md
index 6ceebe8..b49a217 100644
--- a/README.md
+++ b/README.md
@@ -141,6 +141,7 @@ Caching modes:
* `/short [query]` - Create inline shortcut
* `/shorts` - Manage saved shortcuts
* `/stop` - Remove all user data
+* `/ping` - Measure bot latency
* `/donate` - Send donation details
### Inline aliases
diff --git a/files/help.txt.default b/files/help.txt.default
index bfd8510..e653955 100644
--- a/files/help.txt.default
+++ b/files/help.txt.default
@@ -45,6 +45,7 @@
/short [query] - Create inline shortcut
/shorts - Manage saved shortcuts
/stop - Remove all your data
+/ping - Measure bot latency
/donate - Send donation details
<b>Inline aliases:</b>
diff --git a/modules/commands.sh b/modules/commands.sh
index 7871004..82bd66c 100644
--- a/modules/commands.sh
+++ b/modules/commands.sh
@@ -45,6 +45,9 @@ case "${command}" in
("/original" | "/original@${username}")
. "${submodules}/command_original.sh"
;;
+ ("/ping" | "/ping@${username}")
+ . "${submodules}/command_ping.sh"
+ ;;
("/post" | "/post@${username}")
. "${submodules}/command_post.sh"
;;
diff --git a/submodules/command_ping.sh b/submodules/command_ping.sh
new file mode 100644
index 0000000..af1e7b7
--- /dev/null
+++ b/submodules/command_ping.sh
@@ -0,0 +1,117 @@
+# Copyright (C) 2024-2025 Maria Lisina
+# Copyright (C) 2024-2025 Danil Lisin
+# SPDX-License-Identifier: Apache-2.0
+
+output_text="Measuring..."
+output_file="${cache}/${update_id}_sendMessage.json"
+dump="${dump} ${output_file##*/}"
+
+latency_init="$(cat /proc/timer_list | sed '3!d' | parameter 3)"
+
+if ! curl --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}" \
+ --get \
+ --max-time ${internal_timeout} \
+ --output "${output_file}" \
+ --proxy "${internal_proxy}" \
+ --silent \
+ --user-agent "${useragent}" \
+ "${api_address}/bot${api_token}/sendMessage"
+then
+ output_text="Failed to measure latency"
+ log_text="sendMessage (${update_id}): Failed to access Telegram Bot API"
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+
+ return 0
+fi
+
+latency_fin="$(cat /proc/timer_list | sed '3!d' | parameter 3)"
+
+if ! jq -e '.' "${output_file}" > /dev/null
+then
+ output_text="An unknown error occurred"
+ log_text="sendMessage (${update_id}): An unknown error occurred"
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+
+ return 0
+fi
+
+if [ "$(jq -r '.ok' "${output_file}")" != "true" ]
+then
+ output_text="Failed to measure latency"
+ error_description="$(jq -r '.description' "${output_file}")"
+
+ if [ "${error_description}" != "null" ]
+ then
+ log_text="sendMessage (${update_id}): ${error_description}"
+ else
+ log_text="sendMessage (${update_id}): An unknown error occurred"
+ fi
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+
+ return 0
+fi
+
+chat_id="$(jq -r '.result.chat.id' "${output_file}")"
+message_id="$(jq -r '.result.message_id' "${output_file}")"
+
+latency=$(((latency_fin - latency_init) / 1000000 - 10))
+output_text="$(printf "<b>Latency:</b> %ums" "${latency}")"
+
+output_file="${cache}/${update_id}_editMessageText.json"
+dump="${dump} ${output_file##*/}"
+
+if ! curl --data-urlencode "chat_id=${chat_id}" \
+ --data-urlencode "message_id=${message_id}" \
+ --data-urlencode "text=${output_text}" \
+ --data-urlencode "parse_mode=HTML" \
+ --get \
+ --max-time ${internal_timeout} \
+ --output "${output_file}" \
+ --proxy "${internal_proxy}" \
+ --silent \
+ --user-agent "${useragent}" \
+ "${api_address}/bot${api_token}/editMessageText"
+then
+ log_text="editMessageText (${update_id}): Failed to access Telegram Bot API"
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+
+ exit 0
+fi
+
+if ! jq -e '.' "${output_file}" > /dev/null
+then
+ log_text="editMessageText (${update_id}): An unknown error occurred"
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+
+ exit 0
+fi
+
+if [ "$(jq -r '.ok' "${output_file}")" != "true" ]
+then
+ error_description="$(jq -r '.description' "${output_file}")"
+
+ if [ "${error_description}" != "null" ]
+ then
+ log_text="editMessageText (${update_id}): ${error_description}"
+ else
+ log_text="editMessageText (${update_id}): An unknown error occurred"
+ fi
+
+ . "${units}/log.sh"
+ . "${units}/dump.sh"
+fi
+
+exit 0