#!/bin/bash #========================================= # Author : Colben # Create : 2025-11-01 20:10 #========================================= set -euo pipefail umask 022 export LANG=en_US.UTF-8 export TENCENTCLOUD_SECRET_ID='tencent secret id' export TENCENTCLOUD_SECRET_KEY='tencent secret key' DOMAIN=$CERTBOT_DOMAIN SUB_DOMAIN=_acme-challenge RECORD_ID= RECORD_VA=$CERTBOT_VALIDATION if [ -t 0 ]; then function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; } function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; } function ErrorOnly { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; } else #exec &> /var/log/$(basename ${0%.sh}).out function Print { echo -e "$(date +'[%F %T INFO]') $*"; } function Warn { echo -e "$(date +'[%F %T WARN]') $*"; } function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; } function ErrorOnly { echo -e "$(date +'[%F %T ERROR]') $*"; } fi function Quit { local exitCode=$? [ 0 -ne $exitCode ] && Error Failed to request tencent api! [ -z "${END:-}" ] && echo && Error Interrupted manually! Print Succeeded to request tencent api and wait 30 seconds. sleep 30 } function GetTxtRecord { local record="txt record: $SUB_DOMAIN.$DOMAIN" local err= local resp= Warn Getting $record ... resp=$(tccli dnspod DescribeRecordList \ --Domain $DOMAIN \ --Subdomain $SUB_DOMAIN \ --RecordType TXT) || err=$? [ '255' == "$err" ] \ && Warn Not found $record! \ && return 0 [ -n "$err" ] \ && echo "$resp" \ && ErrorOnly Failed to get $record! \ && return $err RECORD_ID=$(echo $resp | jq -rM ".RecordList[0].RecordId") } function CreateTxtRecord { local record="txt record: $SUB_DOMAIN.$DOMAIN" Warn Creating $record ... tccli dnspod CreateTXTRecord \ --Domain $DOMAIN \ --SubDomain $SUB_DOMAIN \ --RecordLine '默认' \ --Value $RECORD_VA \ && Print Succeeded to create $record. \ && return 0 ErrorOnly Failed to create $record! } function ModifyTxtRecord { local record="txt record: $SUB_DOMAIN.$DOMAIN" Warn Modifying $record ... tccli dnspod ModifyTXTRecord \ --Domain $DOMAIN \ --SubDomain $SUB_DOMAIN \ --RecordId $RECORD_ID \ --RecordLine '默认' \ --Value $RECORD_VA \ && Print Succeeded to modify $record. \ && return 0 ErrorOnly Failed to modify $record! } function DeleteRecord { local record="record: $SUB_DOMAIN.$DOMAIN" Warn Deleting $record ... tccli dnspod DeleteRecord \ --Domain $DOMAIN \ --RecordId $RECORD_ID \ && Print Succeeded to delete $record. \ && return 0 ErrorOnly Failed to delete $record! } function Main { trap Quit EXIT GetTxtRecord [ -z "$RECORD_ID" ] && CreateTxtRecord [ -z "$RECORD_ID" ] || ModifyTxtRecord END=1 return 0 } # Start here Main