script
$ touch /root/telegram_remind_schedule.txt
$ vi /root/telegram_remind.sh
#!/usr/bin/sh
NOW=$(date "+%Y-%m-%d %H:%M")
declare -A RECIPIENT
RECIPIENT["REMINDER"]="-8123123"
BOT_TOKEN="2100123123:AAF0WZqCc4Fe5r1aWsVwKuJPDAA231G231M"
SCHEDULE_FILE=/root/telegram_remind_schedule.txt
RAW_MAIL=/var/mail/root
DECODE_MAIL=/root/Mail/decode_mail
IFS=$'\n'
touch $SCHEDULE_FILE
REMIND_SCHEDULE=$(cat $SCHEDULE_FILE | grep "^pending,${NOW}" )
if [ ! -z "$REMIND_SCHEDULE" ]; then
for REMINDER in $(echo "$REMIND_SCHEDULE")
do
REMIND_MSG=$( echo $REMINDER | cut -d ',' -f3- )
curl -X POST \
-H "Content-Type: application/json" \
-d "{\"chat_id\": \"${RECIPIENT[REMINDER]}\", \"text\": \"${REMIND_MSG}\"" \
https://api.telegram.org/bot${BOT_TOKEN}/sendMessage
sed -i "/${REMINDER}/s/^pending/completed/g" $SCHEDULE_FILE
echo ""
done
fi
if [ ! -s $RAW_MAIL ]; then
exit
else
while [[ -s $RAW_MAIL ]] && [[ $READ_COUNT < 10 ]]
do
screen -d -m mutt -f $RAW_MAIL -e "push "
READ_COUNT=$(expr $READ + 1)
done
fi
### clean leading/tailing space: awk '{$1=$1};1'
FILTER_MEMOS=$(cat $DECODE_MAIL | awk '{$1=$1};1' | grep -i "^From: [email protected]\|^hey zabbix" | sed '$aFrom: End')
for MEMO in $(echo "$FILTER_MEMOS")
do
if [ $(echo $MEMO | grep -ic "^From: ") -eq 1 ]; then
if [ ! -z $SUCCESS_MEMO ] || [ ! -z $FAILED_MEMO ]; then
echo -e "${FAILED_MEMO}${SCHEDULE_COUNT} memo(s) is added into pending alarm list:-\n${SUCCESS_MEMO}" | mutt -s "telegram alarm schedule" -- $SENDER
fi
SENDER=$(echo $MEMO | grep -ioP '(?<=^From: ).*')
SCHEDULE_COUNT=0
unset SUCCESS_MEMO
continue
fi
if [ $(echo $MEMO | grep -o "," | wc -l) -lt 2 ]; then
FAILED_MEMO+="Not Enough Values, Please use : ${MEMO}\n"
continue
fi
MEMO_TIME=$(echo $MEMO | cut -d ',' -f2 | awk '{$1=$1};1')
MEMO_MSG=$( echo $MEMO | cut -d ',' -f3- | awk '{$1=$1};1')
date -d "$MEMO_TIME" >/dev/null 2>&1
if [ $? -eq 1 ]; then
FAILED_MEMO+="Bad Time Format, please use YYYY-MM-DD HH24:MI : ${MEMO}\n"
continue
fi
if [ $(date -d "$MEMO_TIME" +%s) -le $(date +%s) ]; then
FAILED_MEMO+="Time Over, please provide a future time : ${MEMO}\n"
continue
fi
FORMAT_TIME=$(date -d ${MEMO_TIME} +"%Y-%m-%d %H:%M")
SCHEDULE_MEMO="${FORMAT_TIME},${MEMO_MSG}"
if [ $(grep -c "${SCHEDULE_MEMO}$" $SCHEDULE_FILE) -gt 0 ]; then
FAILED_MEMO+="This Schedule is already Added : ${MEMO}\n"
continue;
fi
echo "pending,${SCHEDULE_MEMO}" >> $SCHEDULE_FILE
SCHEDULE_COUNT=$(expr $SCHEDULE_COUNT + 1)
SUCCESS_MEMO+="${SCHEDULE_MEMO}\n"
done
cat /dev/null > $DECODE_MAIL
IFS=" "