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

sxkk20082年前知识分享168

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,因此不能实现在钉钉中回复消息的功能。

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

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

相关文章

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

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

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...

【油猴脚本】在 Iconfont 上直接复制 React component 代码

【油猴脚本】在 Iconfont 上直接复制 React component 代码

本文接上一篇《如何在项目中管理你的图标?》Iconfont 和 SVG 优缺点对比在上文中介绍了使用 iconfont 的缺点,以及使用 SVG 的优点,简单归纳为以下几点:Icon 的缺点当网络不好...

百度AI人脸识别系统:破局者与引领者

百度AI人脸识别系统:破局者与引领者

  在当今数字化时代,人脸识别技术被广泛应用于各行各业中,为我们的生活和工作带来了便利和安全。作为中国领先的互联网公司,百度旗下的AI人脸识别系统以其准确性和高效性成为业界瞩...

AI客服机器人哪个好?市场需求逐渐提升

AI客服机器人哪个好?市场需求逐渐提升

  近年来,AI客服机器人在以公开渠道为主的服务行业中逐渐得到了大众的认可和广泛的应用。然而,不同的AI客服机器人平台各有特点,产品质量和服务水平也不尽相同。本文将从市场需求...

AI机器人:新媒体时代的智能助手

AI机器人:新媒体时代的智能助手

  在当今数字化的世界里,新媒体正以前所未有的速度改变着我们的生活方式。而AI机器人作为新媒体时代的智能助手,正逐渐走进我们的日常生活。无论是在家庭、办公室还是公共场合,AI...

百度AI开放平台:人工智能技术引领创新时代

百度AI开放平台:人工智能技术引领创新时代

  随着人工智能技术的不断发展和普及,百度AI开放成为了推动行业创新和变革的重要引擎。百度AI开放平台为开发者提供了丰富的人工智能技术接口和工具,以及全面的技术支持和众多成功...

发表评论    

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