首页 > 其他分享 >微信机器人定时发送脚本

微信机器人定时发送脚本

时间:2023-08-12 21:32:34浏览次数:40  
标签:arr IFS 微信 机器人 echo 值班人 currentName 定时 值班

前言

公司各域都有值班制度,安排人处理线上问题

值班排期,工作日一人,周六周日两人(本周和下周的人)

  • 例如:本周z值班,下周s值班,下下周x值班,本周六周日z和s值班,下周六周日s和x值班

因为我们值班表是发送到企业微信的群里的,就考虑建个机器人然后写一个脚本来定时发送值班安排

思路:

  • 获取文件值班列表和值班总人数
  • 根据指针计算当前值班人与下周值班人
  • 每周日更改值班安排
  • 拼接本周与下周值班人并拼接模板内容
  • 每周日更改值班人指针
  • 获取机器人地址并发送
  • 定时任务

相关点

#获取指定行的内容
nextDuty=$(sed -n "${nextPointer}p" $dutyListPath)

#以|符号分隔为数组
IFS="|"
nextArr=($nextDuty)

#拼接模板内容
notice=$(cat ${noticePath})
temp=$(printf "${notice}" ${currentName} ${currentName} ${nextName} ${namePhone})

#判断当天是否为周日,工作日为1-6,周日为0
if [[ ${currentWeek} -eq 0 ]]; then

#判断字符是否包含某字符
if [[ "{$one}" =~ "no${currentPointer}|" ]]; then
#!/bin/bash
nameAndPhoneList=()
namePhone=""
currentName=""   #本周值班人名称
dutyCount=0      #值班总人数
currentPointer=0 #当前值班人
nextPointer=0    #下周值班人指针
robotUrl=""
nextName=""

#获取当前脚本路径
workdir=$(
    cd $(dirname $0)
    pwd
)
echo "当前工作目录为: ${workdir}"

#读取文件内容并赋值相关变量
prefix=${workdir}
dutyListPath="${prefix}/config/dutyList.txt"
noticePath="${prefix}/config/noticeFormat.txt"
robotUrlPath="${prefix}/config/robotUrl.txt"
currentPath="${prefix}/config/current.txt"

#-----------------初始化姓名与手机---------------------
function initNameAndPhone() {
    list=$1
    idx=0
    OLD_IFS=$IFS
    for one in $list; do
        #echo "init列表项: ${one}"
        #序号|名称|手机|sort|是否值班
        line=$one
        IFS="|"
        arr=($line)
        linearr=${arr[@]}
        
        currentName=${arr[1]}
        phone=${arr[2]}
        
        nameAndMobile=$(printf "%s:%s" ${currentName} ${phone})
        
        nameAndPhoneList[idx]=$nameAndMobile
        idx+=1
    done
    IFS=$OLD_IFS
}

#-----------------读取值班列表并初始化相关变量---------------------
function initVariable() {
    list=$1
    list1=$(cat $dutyListPath)

    echo "值班列表为: \n$list\n"

    #初始化值班列表人名称和手机号
    initNameAndPhone "${list1[*]}"
    
    #初始化值班总人数
    dutyCount=$(cat $dutyListPath | wc -l)
    #初始化微信机器人地址
    robotUrl=$(cat $robotUrlPath)
    #初始化指针
    currentPointer=$(cat ${currentPath})

    OLD_IFS=$IFS

    for one in $list; do
        #echo "列表项: ${one}"
        # 当前值班人
        if [[ "{$one}" =~ "no${currentPointer}|" ]]; then
            line=$one
            IFS="|"
            arr=($line)
            linearr=${arr[@]}
            
            currentName=${arr[1]}
            currentSort=${arr[3]}
            currentSort=$(expr $currentSort + 1)
            nextPointer=${currentSort}
            if (($currentSort > $dutyCount)); then
                nextPointer=1
            fi
            #如果是周日 覆盖指针
            #覆盖指针
            currentWeek=$(date +%w)
            echo "今天是星期${currentWeek}"

            if [[ ${currentWeek} -eq 0 ]]; then
                echo "今天是周日,更改明日值班安排~"
                echo $nextPointer >$currentPath
            fi
            #echo "当前值班人名称: ${currentName}"

            break
        fi
    done
    IFS=$OLD_IFS
}

list=$(cat $dutyListPath)
initVariable "${list[@]}"

for a in ${nameAndPhoneList[@]}; do
    #echo "a is ${a}"
    namePhone="${namePhone}${a}\n"
done


#-----------------获取下周值班人名称---------------------
nextDuty=$(sed -n "${nextPointer}p" $dutyListPath)
OLD_IFS=$IFS
IFS="|"
nextArr=($nextDuty)
nextName=${nextArr[1]}
IFS=$OLD_IFS

#----------------输出信息----------------------
echo "当前值班人名称: ${currentName}"
echo "值班总人数: ${dutyCount}"
echo "下周值班人名称: ${nextName}"

#-----------------开始拼接内容并发送---------------------
notice=$(cat ${noticePath})
temp=$(printf "${notice}" ${currentName} ${currentName} ${nextName} ${namePhone})

curl "${robotUrl}" \
    -H 'Content-Type: application/json' \
    -d '
   {
        "msgtype": "text",
        "text": {
            "content": "'"${temp}"'"
        }
   }'

效果如下:

upload successful

标签:arr,IFS,微信,机器人,echo,值班人,currentName,定时,值班
From: https://blog.51cto.com/u_11906056/7062056

相关文章

  • 微信开发之获取收藏夹列表的技术实现
    简要描述:获取收藏夹内容请求URL:http://域名地址/weChatFavorites/favSync请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String微信实列IDkeyBuf是byte[]第一次传null,如果接口返回keyBuf第二次传keyBuf返回数据:参......
  • 微信开发之获取收藏夹列表的技术实现
    简要描述:获取收藏夹内容请求URL:http://域名地址/weChatFavorites/favSync请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String微信实列IDkeyBuf是byte[]第一次传null,如果接口......
  • 微信开发之一键获取标签好友的技术实现
    简要描述:获取标签列表请求URL:http://域名地址/getContactLabelList请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String登录实例标识请求参数示例{"wId":"349be9b5-8734-45ce-811d-4e10ca568c67"}成功返回......
  • 微信开发之一键修改好友标签的技术实现
    移除标签下的好友:把需移除的好友所有标签查出来(通讯录详情接口返回标签id,数据库需缓存),去掉想移出的标签id,labelIdList参数放进其他所有标签id。增加标签新好友:把需添加的好友所有标签查出来(通讯录详情接口返回标签id,数据库需缓存),labelIdList参数放进新标签id和原有所有标签id。某......
  • 微信第三方平台前100名
    微信第三方平台也叫公众平台第三方,通俗地讲就是利用微信公众平台给出的开发文档,经过后期的开发,形成一套功能相对完善的系统,可以给公众号提供增值服务的计算机程序。2018伊始,有哪些好用的微信第三方平台呢?小编特意从网络上搜集了一下,整理了前100名微信第三方平台。【排名不分先后......
  • 微信登录_导入小程序代码
        ......
  • 微信小程序_发布上传
       ......
  • 微信小程序开发_入门案例_3
       ......
  • 微信小程序开发_入门案例_4
       记得开启项目和Redis  ......
  • 微信小程序开发_入门案例_2
        ......