Files
konata/konata.sh
Michael De Roover d5db8cfb7a Improve youtube-dl
Read: work around its retardation
2021-01-02 17:42:10 +01:00

144 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Hard requirement for lighttpd
printf "Content-Type: text/plain\n\n"
# Initialize basic variables
. /etc/konata.conf
input=$(cat /dev/stdin)
bot="konatasanbot"
# Parse incoming messages
cmd=$(jq -r '.message.text' <<< $input)
args=$(cut -d" " -f2- <<< $cmd)
chat=$(jq -r '.message.chat.id' <<< $input)
user=$(jq -r '.message.from.username' <<< $input)
# Functions for outgoing messages
sendmsg(){
# Escape any special characters first, see https://0x0.st/NO7J.
fmt=$(sed 's/[][~!@#$%^&*()-_=+{}\|;:",<.>/?'"'"']/\\&/g' <<< $1 | sed 's/\t//g')
sendraw "$fmt"
}
sendraw(){
curl -X POST "https://api.telegram.org/bot$token/sendMessage" \
-d "chat_id=$chat" -d "parse_mode=markdownv2" \
-d "disable_web_page_preview=true" -d "text=$1"
}
sendfile(){
curl -sF document=@"$1" "https://api.telegram.org/bot$token/sendDocument?chat_id=$chat"
}
# Public commands
help(){
sendmsg "Hiya! I'm @ghnou's personal bot, Konata.
Currently I have the following features:
- /help - Show this help message.
- /alive - Check whether I'm running.
- /cv [country] - Check COVID-19 stats.
- /id - Get the current chat's ID.
Admin only commands:
- /mp3 [link] - Download an mp3 file from YouTube.
- /stat - Uptime, memory, storage stats.
- /term - Execute a command on the system.
And a lot more to come!"
}
alive(){
sendmsg "Alive and well!"
}
cv(){
stats=$(curl -sL "corona.lmao.ninja/v2/countries/$args")
country=$(jq -r '.country' <<< $stats)
cases=$(jq -r '.todayCases' <<< $stats)
if [ "$(jq -r '.message' <<< $stats)" != "null" ]
then
sendmsg "This country doesn't have any stats!"
else
sendmsg "Today's COVID-19 cases for $country: $cases. Stay safe!"
fi
}
id(){
sendmsg "Chat ID: $chat"
}
#Administrative
mp3(){
admin
tmp="/tmp/mp3"
[ -d $tmp ] && mkdir $tmp
sendmsg "Downloading, this might take a while..."
youtube-dl -f 140 --max-filesize 50M -o "$tmp/%(title)s.%(ext)s" "$args"
rm $tmp/*.part
if [ -f $tmp/* ]
then
sendfile "$tmp/$(ls $tmp)"
rm $tmp/*
else
sendmsg "I couldn't download this file. Perhaps it's too large?"
fi
}
stat(){
admin
total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
avail=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
used=$(bc <<< "$total-$avail")
sendmsg "$(uptime | cut -c2-)
I am using ${used}K of memory and \
$(df -h / | tail -n1 | awk '{print $3}') of storage."
}
term(){
admin
sendmsg "\`$(echo $args | bash - 2>&1)\`"
}
fail(){
sendmsg "Sorry, you are not allowed to use this command!"
exit 1
}
admin(){
case $user in
ghnou) continue ;;
*) fail ;;
esac
}
# Notes and such
anyone(){
sendraw "Quite possibly\. [Why do you ask?](https://dontasktoask.com)"
}
# Miscellaneous
tag(){
sendmsg "Please stand by, he'll get to your message soon™..."
}
hiya(){
sendmsg "Hiya! :3"
}
# Match incoming messages
case "$cmd" in
# Public commands
/help | /help@$bot) help ;;
/start | /start@$bot) help ;;
/alive | /alive@$bot) alive ;;
/cv* | /cv@$bot*) cv ;;
/id | /id@$bot) id ;;
#Administrative
/mp3* | /mp3@$bot*) mp3 ;;
/stat | /stat@$bot) stat ;;
/term* | /term@$bot*) term ;;
# Notes and such
!anyone) anyone ;;
# Miscellaneous
*@ghnou*) tag ;;
*@konatasanbot*) hiya ;;
esac