用云函数开发掘金钉钉机器人

sxkk20081年前知识分享113

highlight: vs2015

前言

前段时间看了 B 站 UP 主@人工智能小黄鸭的出的视频,可以利用飞书机器人在线刷题,非常牛逼,行云流水。自从我在稀土掘金社区技术更文以来,每天非常关注文章点赞评论消息,而我常使用的是聊天软件是钉钉,所以我在想,是否可以利用云函数对接掘金,实现一个钉钉机器人,把我的掘金消息自动推送给我。

实现功能

  • 自动签到和抽奖
  • 掘金消息提醒

申请钉钉机器人

新建一个只有你自己的个人群

钉钉群助手

点击群助手创建一个自定义的 webhook

添加机器人

安全设置选择自定义关键词,输入掘金消息 创建机器人

复制 webhook 地址,等会在云函数中使用。

免费的云开发平台

lafyun

云函数我推荐 lafyun,laf 是一个开源云开发平台,可以像写博客一样写函数,随手上线,最重要的是官网体验版现在是免费的,laf 目前只支持 Node.js 运行环境,当前大家可以选择其他云开发平台。

云函数自动签到

钉钉机器人文档地址

在 laf 平台注册后,新建云函数输入以下代码

'use strict'
const axios = require('axios')
// 请求签到、抽奖的接口
const checkInApi = 'https://api.juejin.cn/growth_api/v1/check_in'
const drawApi = 'https://api.juejin.cn/growth_api/v1/lottery/draw'
// 钉钉机器人 Webhook
const dingtalk_robot_url =
  'https://oapi.dingtalk.com/robot/send?access_token=a5abc0f85c385aabd922dbe9a2d42741a2f8bd8634b8bc543e7193ae7012120b'
// 请求接口的cookie配置
const cookieInfo = '掘金cookie'
// 请求签到接口
const checkIn = async () => {
  let { data } = await axios({
    url: checkInApi,
    method: 'post',
    headers: { Cookie: cookieInfo },
  })
  return data
}
// 请求抽奖接口
const draw = async () => {
  let { data } = await axios({
    url: drawApi,
    method: 'post',
    headers: { Cookie: cookieInfo },
  })
  return data
}
// 签到完成 发送钉钉
const sendDingDing = async (md) => {
  const sendMessage = {
    msgtype: 'markdown',
    markdown: {
      title: '掘金消息',
      text: md,
    },
    at: {
      atMobiles: [],
      atUserIds: [],
      isAtAll: false,
    },
  }
  return await axios.post(dingtalk_robot_url, sendMessage)
}

exports.main = async function (ctx: FunctionContext) {
  // body, query 为请求参数, auth 是授权对象
  const { auth, body, query } = ctx
  const checkInData = await checkIn()
  if (checkInData.data) {
    sendDingDing(
      `掘金签到成功!\n 今日获得${checkInData.data.incr_point}矿石,\n 当前总矿石:${checkInData.data.sum_point}`
    )
  } else {
    sendDingDing(`掘金签到失败,\n ${JSON.stringify(checkInData)}。\n`)
  }
  const drawData = await draw()
  if (drawData.data) {
    sendDingDing(`掘金抽奖成功!\n  获得:${drawData.data.lottery_name}`)
  } else {
    sendDingDing(`掘金抽奖失败,\n ${JSON.stringify(drawData)}`)
  }
  console.log('🔥', checkInData, drawData)

  return 1
}
  • 替换 cookieInfo 为你自己的 cookie

  • 替换 dingtalk_robot_url为你申请的钉钉机器 Webhook

  • 在依赖管理中,添加依赖 axios,用于网络请求

laf 添加 axios

  • 点击触发器

新建一个定时器触发器,输出时间间隔 60s * 60m * 24h = 86400s,也就是每天定时一次。 云函数每天定时一次

添加完成后,点击发布函数就可以在订单消息中收到签到成功的消息了。 需要注意的是:每次点击发布函数都会触发一次定时器执行,所以如果你有多个函数要发布,记得先得把定时器关闭了,不然就会消耗 200 矿石进行抽奖。

掘金消息提醒

用同样的原理,我们新建一个云函数用于消息推送

import axios from 'axios'
import cloud from '@/cloud-sdk'

// 钉钉机器人 Webhook
const dingtalk_robot_url =
  'https://oapi.dingtalk.com/robot/send?access_token=a5abc0f85c385aabd922dbe9a2d42741a2f8bd8634b8bc543e7193ae7012120b'
// 请求接口的cookie配置
const cookieInfo = '掘金cookie'

const headers = {
  'content-type': 'application/json',
  cookie: cookieInfo,
}

async function getCount() {
  return axios
    .get('https://api.juejin.cn/interact_api/v1/message/count?aid=2608&uuid=6899676175061648910', {
      headers,
    })
    .then((res) => res.data)
}

async function getMessage(message_type) {
  const data = { message_type, cursor: '0', limit: 20, aid: 2608 }
  return axios
    .post(
      'https://api.juejin.cn/interact_api/v1/message/get_message?aid=2608&uuid=6899676175061648910',
      data,
      {
        headers,
      }
    )
    .then((res) => res.data)
}

async function sendMessage(message_type) {
  const res = await getMessage(message_type)

  const message = res.data[0]
  let text = '默认消息'

  switch (message_type) {
    case 3:
      text = `**[${message.src_info.name}](https://juejin.cn/user/${message.src_info.item_id})** 评论了您的文章 \n\n [${message.parent_info.name}](https://juejin.cn/post/${message.parent_info.item_id}) \n\n ${message.dst_info.detail} \n`
      if (message.message.action_type === 31) {
        text = `**[${message.src_info.name}](https://juejin.cn/user/${message.src_info.item_id})** 回复了你在文章 \n\n [${message.parent_info.name}](https://juejin.cn/post/${message.parent_info.item_id}) 下的评论:\n\n ${message.dst_info.detail} \n`
      }
      break
    case 1:
      text = `**[${message.src_info.name}](https://juejin.cn/user/${message.src_info.item_id})** 赞了你的文章 \n\n [${message.dst_info.name}](https://juejin.cn/post/${message.dst_info.item_id})`
      break
    case 2:
      text = `**[${message.src_info.name}](https://juejin.cn/user/${message.src_info.item_id})** 关注了你`
      break
  }

  const sendMarkdownMessage = {
    msgtype: 'markdown',
    markdown: {
      title: '掘金消息',
      text: text,
    },
  }
  await axios.post(dingtalk_robot_url, sendMarkdownMessage)
}

exports.main = async function (ctx: FunctionContext) {
  // body, query 为请求参数, auth 是授权对象
  const { auth, body, query } = ctx

  const count = await getCount()
  if (count.data.total > 0) {
    if (count.data.count[1] > 0) {
      sendMessage(1)
    }
    if (count.data.count[2] > 0) {
      sendMessage(2)
    }
    if (count.data.count[3] > 0) {
      sendMessage(3)
    }
  }

  return 1
}

上面代码我只取了点赞、评论和关注消息,系统消息 message_type = 4没有通知, 然后再添加定时器,设置定时器为 60s 一次,这样就可以在钉钉收到掘金消息了!

存在问题

比如我想在钉钉中直接回复消息

但是收到消息 body 中没有回复消息的内容。

收到消息函数返回 body

发送消息的时候钉钉开放接口也没有返回 messageId,因此不能实现在钉钉中回复消息的功能。

当然如果有小伙伴常用飞书,则可以加上回复消息的功能。

以上就是本文全部内容,如果对你有帮助,可以随手点个赞,这对我真的很重要,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

相关文章

AI绘画动漫—AI技术在动画制作中的应用

AI绘画动漫—AI技术在动画制作中的应用

  随着人工智能技术的不断发展,越来越多的行业开始尝试将其应用于自己的领域。在动画制作领域中,人工智能技术也受到了广泛关注。其中,AI绘画动漫技术的出现,为动画制作注入了全新...

如何通过百度AI语音探索新媒体时代的无限可能?

如何通过百度AI语音探索新媒体时代的无限可能?

  在当今新媒体时代,传统文字已经无法满足社交媒体用户的需求,语音成为了一种更直观,更便捷的交流方式。百度AI语音作为一项领先的人工智能技术,正在助力新媒体发展,为用户带来更...

人工智能改变生活?这些领域正在被AI悄然渗透

人工智能改变生活?这些领域正在被AI悄然渗透

  人工智能(Artificial Intelligence,AI)作为当今最热门的技术领域之一,正在对人类的生活产生越来越深远的影响。从智能家居到医疗保健,从工业制造到...

智能管家:革新生活品质的智慧助手

智能管家:革新生活品质的智慧助手

  现如今,科技的不断进步带来了许多改变,其中智能管家作为人工智能技术的重要应用之一,正逐渐渗透到人们的生活中。智能管家不仅使生活更加方便和舒适,还提供了更多的可能性与安全保...

人工智能改变生活,预测未来生活将变成什么样?

人工智能改变生活,预测未来生活将变成什么样?

  人工智能(AI)作为一种新兴技术,正在改变着我们的生活方式。随着科技的不断发展,越来越多的人工智能应用进入到我们的日常生活中,其中包括我们生活中的网购、社交、出行、医疗甚...

有个非常大的缺点,就是需要一个安静的环境,声音必须外放,后来因为代码压缩,下架了。

现在推荐一款大神开发的,界面是这样的

Azure Speech Download

不必先播放,就可以直接下载音频文件,相信对一些视频制作者有很大帮助,我的几个视频就是通过这个插件获得的音频,再配上制作 keynote 动画导出视频,剪辑实现,可以说是非常好用。

2. copy-helper

网址:https://greasyfork.org/zh-CN/scripts/439663-copy-helper

文章拷贝助手,掘金、简书、微信文章、知乎专栏、思否、CSDN 文章一键拷贝 markdown。

文章拷贝助手

我还写了篇文章介绍如何实现这个脚本,无论对个人知识整理和收集,还是公众号主运营,都很有帮助。

3. 壹伴排版 Plus

网址: https://greasyfork.org/zh-CN/scripts/439551-壹伴排版-plus

公众号运营者福利,可以在微信公众平台可直接插入壹伴的模板,免开 vip

壹伴排版 Plus

这款插件也是笔者开发的,关于如何实现,有一篇文章介绍

4. 屏蔽广告

网址:https://greasyfork.org/zh-CN/scripts/439420

屏蔽谷歌广告、百度广告、知乎广告、隐藏谷歌和百度搜索增强百度搜索结果的各种广告等等(过滤所有采用谷歌联盟和百度联盟等广告联盟的广告)

屏蔽广告设置

安装好脚本之后,可以点击油猴,去脚本【广告管理设置】,在设置里也能看见这个脚本都支持哪些网站,还支持 CSDN 外链优化。

5. 稿定去水印

网址:https://greasyfork.org/zh-CN/scripts/454511

有些同学问我的博客首图是怎么设计的?我用的就是这款插件,稿定提供了大量免费设计素材和免费设计和视频模板、在线抠图和电商海报设计模板等,一键搞定设计需求。

稿定去水印

安装完成后,在右上角会有一个去水印按钮,设置完成后,使用 QQ 微信登截屏工具,截图即可。

6. iconfontr

网址:https://greasyfork.org/zh-CN/scripts/447288-iconfontr

前端开发者福利,在 Iconfont 可以直接复制 React component

iconfontr

推荐6款油猴脚本,不看错亿!

本文视频地址推荐 6 款贼好用的油猴脚本,其中有 4 个是笔者开发的,看完了文章,要是对这几款脚本感兴趣的话,赶紧去试试看,且用且珍惜!1. Azure Speech Download网址:https...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。