Wechaty Plugin|實現一個微信機器人幾行代碼即可

語言: CN / TW / HK

寫在前面

晚到幾個月的帖子,這幾個月有些忙,沒顧上,關於為什麼要開發微信機器人、技術選型、Token申請、一期簡單的開發可以看我4個月之前在掘金髮布的文章

Wechaty|NodeJS基於iPad協議手擼一個簡單的微信機器人助手

開發一個微信機器人難嗎?真的很簡單,看之前那篇文章就知道了,5月30號的「Wechaty Plugin conference」,wechaty 正式推出了 plugin 系統,wechaty 的作者 Huan (李卓桓) 以及 wechaty plugin 系統的開發者同時也是開源項目 Wepy 作者 Gcaufy 的一番演講挺讓人很興奮的,因為在開發上一版機器人時,雖然簡單,但是會感覺有些功能寫着不難,就是比較瑣碎,並且所有的業務邏輯代碼都堆積在一塊,很難受

但是 wechaty plugin 系統的上線,完美解決了這個問題,一個插件一個功能,基於配置,簡潔明瞭,並且後期plugin 生態足夠強大了,可以隨時隨地的為我們的機器人配置各種想要的功能,開發起來也會更加順滑和簡單

申請免費Token?

瞭解 wechaty 或者看了之前那篇帖子的朋友可能知道,wechaty 使用 pad 協議是需要申請 token 的,可能有很多人看到需要 token 直接就撤了,這沒辦法,畢竟句子團隊的研發也是需要成本的,沒有必要吐槽,不過你也可以參與開源激勵計劃來獲取長期 token,這個世界上大佬佔有量總是少數,可能更多的人看到開源激勵計劃這幾個字就覺得和自己沒關係,事實上沒有想象的那麼難

這麼説吧, wechaty plugin 推出前,你只需拿着試用的 token 開發一個產品(不要會錯意,官方也説了是MVP產品,最小可行化產品,按照我的理解來説,最小可行產品就是剛好具備能夠幫助你表達產品的核心概念的部分功能的產品,簡單來説,你想用它做什麼東西,你把這個東西核心功能做出來,並且放到 github 中開源即可,沒有簡單複雜之分,可行的產品就ok,就比如我做的產品核心就是為了管理微信羣組和自動加好友,我就簡單實現了這樣一個東西,僅此而已),開發出產品後把代碼開源到 github 並且寫一篇帖子就行了

那麼 wechaty plugin 推出後,你只需要開發一個插件就可以了,你可能會説開發一個插件很難吧,其實並不是,插件有很多種類,取決於開發者的奇思妙想,像我這種比較笨的,開發了幾個常規插件,自動邀人、入羣歡迎、自動踢人、羣簽到等等,每一個插件最少的可能只需要十幾行代碼,一般來説,只要有點開發基礎就能開發出來,不管插件簡單還是並不是太實用,句子團隊肯定是來者不拒的,因為這有利於 wechaty 生態的發展,畢竟對於一個項目來説,有更多的開發者願意參與進來,相信對這個項目的發展只會有利無害,對項目的發起團隊來説,肯定也是非常值得開心的

可能還會有人怕代碼寫的爛被人吐槽,我覺得這也沒什麼,我就不是一個大佬,代碼寫的也挺爛的,個人覺得對一個程序員來説,臉皮厚很重要,就像寫一篇帖子,如果有人吐槽,吐槽的對,我改了就是還能汲取一波知識,吐槽的不對技不如人那就要原諒我直接回懟了,怎麼想都是對我百利無一害的,程序員,簡簡單單,挺好

看到這你可能我像個推銷產品的人,當然你怎麼想對我來説都只是陌生人的遐想罷了,不痛不癢,站在我的立場上,我只是對微信機器人比較感興趣,覺得好玩實用,對 wechaty plugin 也很關注,奈何目前開發插件的人和插件數量實在不多,所以給大家打一波雞血,好玩的插件多了,那機器人會越來越好玩

另外,我覺得微信機器人對一些知名博主或者公眾號的作者會很有用,畢竟可以有效管理羣聊提升羣聊的活躍性,當然很多公眾號大 V 們都有自己的機器人,也是各種渠道吧,但是能夠免費接入的應該不多吧,免費的也會有各種各樣的限制,wechaty 就不一樣了,身為程序員嘛,自己開發適合自己的機器人豈不是更好

開發需求

還是來簡單介紹下我的需求,我這邊因為在做公眾號嘛,也有一些微信交流羣,有興趣的朋友也可以關注下「不正經的前端」,有人加交流羣什麼的這一套流程人為操作真的是很痛苦,我需要一個機器人來自動通過好友,關鍵字自動邀請入羣,便捷的一些羣管理以及活躍下羣氛圍什麼的,都是一些很普通的需求

上一版的開發其實已經足夠我日常的需求了,不過後期擴展都需要我自己開發,還是比較麻煩的,所以我就把上一版的一些需要用到的功能封裝成插件發包了,這樣的話使用簡單,代碼簡潔,如果別人有這個模塊需求也可以直接安裝使用插件,除了使用我自己開發的一些插件外,還使用了幾個官方的插件來豐富我的機器人,總之,不算插件配置項的話,整體的代碼量也就10來行吧

項目介紹

其實沒什麼好介紹的了,因為改用了插件體制,每個功能都是一個插件,插件即功能,我就直接把用到的所有插件給大家一一介紹下吧,有自己開發的、官方開發的、其他人開發的,也期待可以用到大家開發的插件

當然如果你不想看這些插件介紹,也可以直接點開項目地址,直接看代碼,跑一下即可,拋開配置也沒幾行代碼

➡️ isboyjc/wechaty-plugin-robot - GitHub傳送門

項目搭建 & 插件使用

初始化項目實例

const { Wechaty } = require("wechaty") // Wechaty核心包
const { PuppetPadplus } = require("wechaty-puppet-padplus") // padplus協議包

// 初始化
const bot = new Wechaty({
  puppet: new PuppetPadplus({
    token: PUPPET_PADPLUS_TOKEN, // 你的token
  }),
  name: ROBOT_NAME, // 你的機器人名字
})
複製代碼

使用插件並啟動

const pluginTest = require("wechaty-plugin-test") // 引入插件

// 使用插件 options為插件配置對象
bot.use(pluginTest(options))

// 啟動機器人
bot.start()
複製代碼

wechaty-plugin-contrib

重點介紹

當您發現自己在編寫重複的代碼時,就應該將其提取到插件中,通過調用 Wechaty.use(WechatyPlugin()) ,我們可以很好地支持使用插件,微信插件是一個 JavaScript 函數,它返回一個接受微信實例的函數,第一個微信插件系統是由核心團隊開發人員 @gcaufy 設計的,這個包是用來發布核心開發團隊常用的微信插件的

上面這段話是官方對這個包的解釋,簡單來説,這個官方發佈的包裏有一些好玩的插件供我們大家使用,它是一個插件集合,我們直接安裝這個包,就可以使用裏面的所有插件,現在裏面有十來個插件吧,大家也可以給這個包PR一些插件,但是要求每個功能插件代碼量不超過100行代碼,超過100行的插件官方是建議自己發包的

如果大家想要了解更多這個插件集合中的插件👇👇👇

wechaty/wechaty-plugin-contrib - GitHub傳送門

我使用了其中幾個插件,給大家分別闡述下具體功能,當然我們要先安裝這個包

npm install wechaty-plugin-contrib

// or

yarn add wechaty-plugin-contrib
複製代碼

QRCodeTerminal

在機器人登錄的時候,終端顯示掃描二維碼,之前我們需要自己安裝 qrcode-terminal 插件,然後監聽 scan 事件,現在使用插件,除了引用依賴,一行代碼即可

const { QRCodeTerminal } = require("wechaty-plugin-contrib")

bot.use( QRCodeTerminal({ small: false }))
複製代碼

諾,使用之後啟動項目的時候就可以在終端打印二維碼了,然後我們微信掃碼登錄即可

EventLogger

官方解釋是記錄 “掃描”|“登錄”|“消息”的微信事件…等,其實簡單來説就是一個日誌輸出,登錄之後的所有操作會在控制枱打印日誌,使用也很簡單

提供事件日誌:"dong" | "message" | "error" | "friendship" | "heartbeat" | "login" | "logout" | "ready" | "reset" | "room-invite" | "room-join" | "room-leave" | "room-topic" | "scan"

有一個參數 options ,數組類型,可自由選擇打印事件日誌,我沒有填寫此參數,默認就打印所有事件

const { EventLogger } = require("wechaty-plugin-contrib")

bot.use(EventLogger())
複製代碼

RoomConnector

這個插件比較有意思,連接房間,把任何房間的信息廣播到所有其他房間,因為微信羣的上限是500人,為此可能很多公眾號大大會創建多個羣聊,但是它們的消息是不互通的,該插件就是為此而生的

它支持三種模式

  • OneToManyRoomConnector 可以廣播消息在一個房間到其他房間
  • ManyToOneRoomConnector 可以將各個房間的信息彙總到一個房間
  • ManyToManyRoomConnector 將把任何房間的所有信息廣播到所有其他房間

我這裏使用了它的 ManyToManyRoomConnector 模式,把任何房間的所有信息廣播到所有其他房間

具體配置如下,當然,想要了解更多可以點擊上文這個插件集合包的 github 地址查看官方文檔

bot.use(
  ManyToManyRoomConnector({
    // 黑名單
    blacklist: [async () => true],
    // 多個羣聊列表
    many: [
      "10614174865@chatroom", // Web圈0x01
      "22825376327@chatroom", // Web圈0x02
      "24661539197@chatroom", // 微信機器人
    ],
    // 遍歷併發送出的消息
    map: async (message) => {
      let roomName = await message.room().topic()
      let name = await message.room().alias(message.from())
      name ? null : (name = message.from().name())
      return `來自羣聊【${roomName}】的【${name}】説 \n\n ${message.text()}`
    },
    // 白名單
    whitelist: [async (message) => message.type() === bot.Message.Type.Text],
  })
)
複製代碼

wechaty-voteout

簡介

這個插件是 Gcaufy 開發的,它是一個微信投票插件,可以幫助您有一個投票和踢出功能為您的房間

就是説當你的羣聊中有不當的發言者時,發送 @用户 [關鍵字或表情],就可以發起投票了,可以設置數量,達到一定的數量會被移除羣聊

安裝

npm install wechaty-voteout --save
複製代碼

使用

const VoteOut = require('wechaty-voteout')

bot.use(VoteOut({ /* options */ }))
複製代碼

options 配置請參考下面示例配置

示例

const options = {
  //您希望機器人與哪個房間一起工作
	//可以是RegExp(用於主題)或函數(過濾室實例)
	//例如 室:函數(室){room.topic()。indexOf('我的')> -1}
  room: [/Room Topic 1/i, 'room_id@chatroom'],
  // 當達到目標時,就意味着他將被移出
  threshold: 3,
  // 白名單,永遠不會被投票移除的人
  // 使用RegEx表示聯繫人姓名,使用字符串表示聯繫人ID
  whitelist: [],
  // 不同的木偶得到不同的標誌
	// 我們運行更多的案例以查看它是什麼符號,並在此處更新註釋,就是表情符號
  downEmoji: [
    '[弱]',
    '[ThumbsDown]',
    '<img class="qqemoji qqemoji80" text="[弱]_web" src="/zh_CN/htmledition/v2/images/spacer.gif" />',
  ],
  // 警告模板,設置為falsy以禁用警告消息
  warn: [
    '可能是因為你的聊天內容不當導致被用户投票,當前票數為 {{ downNum }},當天累計票數達到 {{ threshold }} 時,你將被請出此羣。',
  ]
  // 彈出模板,設置為falsy來禁用消息
  kick: '經 {{ voters }} 幾人投票,你即將離開此羣。',
  repeat: '你已經投票過 {{ votee }} 了,無需再投。',
}

bot.use(VoteOut(options))
複製代碼

來看一個運行中的圖片

插件其實用法很簡單,但是由於不是我開發的,所以大家想查看更多詳細介紹請猛戳👇👇👇

Gcaufy/wechaty-voteout - GitHub傳送門

wechaty-friend-pass

簡介

此插件功能是,自動通過好友請求,或者設置一些關鍵字,通過好友申請時備註的關鍵字來校驗是否要自動通過該好友申請,並且通過好友申請時自動回覆一段話

當時沒看到 wechaty-plugin-contrib 中有一個 FriendshipAccepter ,功能差不多,不過我還是使用了自己開發的, 大家也可以選擇性使用

安裝

npm install wechaty-friend-pass

// or

yarn add wechaty-friend-pass
複製代碼

使用

const WechatyFriendPass = require("wechaty-friend-pass")

bot.use(WechatyFriendPass(options))
複製代碼

如上所示,使用插件只要按需傳入配置對象 options 即可

Options 參數屬性 類型 簡介
keyword String|Array 好友請求時備註自動通過的關鍵字,只有一個可以使用字符串類型,多個關鍵字使用數組類型,全部通過不用校驗傳入字符串 "*" 即可,不傳即都不自動通過
blackId String|Array 用户黑名單 ID,該項可填寫用户的 ID 來識別用户,讓此用户不被自動通過,也可不填
reply String 自動通過用户好友申請後自動回覆一句話,為空或不填則通過後不回覆

示例

const options = {
  keyword: ["加「屏蔽違規字段專用」羣", "前端", "後端", "全棧"],
  blackId: ["*******@id", "*******@id"],
  reply: "你好,我是機器人小助手圈子 \n 加入技術交流羣請回復【加「屏蔽違規字段專用」羣】\n 聯繫小主請回復【123】",
}

bot.use(WechatyFriendPass(options))
複製代碼

使用中如下圖

查看更多詳細介紹請猛戳 👉 isboyjc/wechaty-friend-pass - GitHub傳送門

wechaty-room-invite

簡介

向機器人發送某些關鍵字,機器人會通過這些關鍵字邀請你進入對應的房間,當然,可以管理多個房間

安裝

npm install wechaty-room-invite

// or

yarn add wechaty-room-invite
複製代碼

使用

const WechatyRoomInvite = require("wechaty-room-invite")

bot.use(WechatyRoomInvite(options))
複製代碼

如上所示,使用插件只要按需傳入配置對象 options 即可

Options 參數屬性 類型 簡介
keyword String|Array 觸發邀請該用户的關鍵字,只有一個可以使用字符串類型,多個關鍵字使用數組類型
roomList Array 機器人管理的羣聊列表,該項為必填項,數組對象中具體配置請看下面示例
reply String roomList 數組長度大於 1 時,視為管理多個羣聊,那麼 keyword 觸發後會回覆用户當前管理的羣聊列表數據供用户選擇進入某一個羣,這個羣聊數據列表為一段由 roomList 配置生成的話,roomList 數組長度等於 1 時,keyword 觸發將會直接拉起羣邀請,那麼此字段也無用,reply 字段不是必選項,管理多個羣聊時,建議直接使用默認文字,默認流程可看最後示例圖片

我們來看 roomList 數組的配置示例

roomList: [
  {
    // 羣聊名字,管理多個羣聊時用户可通過羣聊名字選擇某個羣聊
    name: "微信機器人",
    // 羣聊id
    roomId: "22275855499@chatroom",
    // 羣聊別名,建議簡短,管理多個羣聊時用户可通過別名選擇某個羣聊,叫它[編號]可能更好
    alias: "A05",
    // 標籤,用於在管理多個羣聊時給各個羣聊做一個簡單的標識,方便用户選擇
    label: "新羣",
    // 是否關閉進入,如果為true,則觸發該羣時,會提示該羣不可進入
    close: true,
  },
  ...
]
複製代碼

示例

const options = {
  keyword: ["加*屏蔽違規字段專用*羣", "入羣", "羣"],
  roomList: [
    {
      name: "Web圈0x01",
      roomId: "10614174865@chatroom",
      alias: "A01",
      label: "推薦",
    },
    {
      name: "Web圈0x02",
      roomId: "22825376327@chatroom",
      alias: "A02",
      label: "新羣",
    },
    {
      name: "微信機器人",
      roomId: "24661539197@chatroom",
      alias: "A04",
      label: "推薦",
    },
    {
      name: "男神開門羣",
      roomId: "22275855499@chatroom",
      alias: "A05",
      label: "測試",
      close: true,
    }
  ],
  reply: "",
}

bot.use(WechatyRoomInvite(options))
複製代碼

管理多個羣聊時,當用户給機器人發送【加「屏蔽違規字段專用」羣】,機器人默認會回覆,當然你也可以自己設置

查看更多詳細介紹請猛戳 👉 isboyjc/wechaty-room-invite - GitHub傳送門

wechaty-room-welcome

簡介

這是一個及其簡單的插件,就是用於監聽羣聊中新人員的加入,隨後回覆一個入羣歡迎,可管理多個羣聊

安裝

npm install wechaty-room-welcome

// or

yarn add wechaty-room-welcome
複製代碼

使用

const WechatyRoomWelcome = require("wechaty-room-welcome")

bot.use(WechatyRoomWelcome(options))
複製代碼

options 參數是一個對象,只有一個屬性 reply

Options 參數屬性 類型 簡介
reply String|Array reply參數為字符串時,機器人加入的所有羣聊監聽到新的加入都將回復此歡迎語,當為數組時,可自由配置管理的每個羣聊要回復什麼歡迎語,為數組類型的具體配置請看下文示例

reply 數組格式示例

reply: [
  {
    // 羣聊名
    name: "微信機器人",
    // 羣聊id
    roomId: "24661539197@chatroom",
    // 入羣回覆的歡迎詞
    reply: `\n 你好,歡迎你的加入,請自覺遵守羣規則,文明交流,最後,請向大家介紹你自己!😊`,
  },
	...
]
複製代碼

示例

const options = {
  reply: [
    {
      name: "Web圈0x01",
      roomId: "10614174865@chatroom",
      reply: `\n 你好,歡迎你的加入,請自覺遵守羣規則,文明交流,最後,請向大家介紹你自己! 😊`,
    },
    {
      name: "微信機器人",
      roomId: "24661539197@chatroom",
      reply: `\n 你好,歡迎你的加入,請自覺遵守羣規則,文明交流,最後,請向大家介紹你自己!😊`,
    },
    {
      name: "男神開門羣",
      roomId: "22275855499@chatroom",
      reply: `男神你好,歡迎加入`,
    },
  ],
}

bot.use(WechatyRoomWelcome(options))
複製代碼

使用如下圖

查看更多詳細介紹請猛戳 👉 isboyjc/wechaty-room-welcome - GitHub傳送門

wechaty-room-remove

簡介

你可以在羣聊中@一個違規的人並攜帶你所設置的關鍵字,機器人監聽到後會幫你快捷的移除他並且給出提示,這比手動刪除羣聊中某一個人要方便的多

安裝

npm install wechaty-room-remove

// or

yarn add wechaty-room-remove
複製代碼

使用

const WechatyRoomRemove = require("wechaty-room-remove")

bot.use(WechatyRoomRemove(options))
複製代碼

如上所示,使用插件只要按需傳入配置對象 options 即可

Options 參數屬性 類型 簡介
keyword String|Array 觸發移除該用户的關鍵字,只有一個可以使用字符串類型,多個關鍵字使用數組類型,默認為 ["飛機", "踢"]
time Number 觸發移除後的延時/ms,默認3000,即3s
adminList Array 可觸發命令的管理員列表,一個數組對象,單個數組對象屬性請看下面配置示例
replyInfo String|Function 移除前@提示該用户的一句話,可為字符串類型,也可以是函數類型,函數類型時,有一個參數msg,即當前消息實例,函數最終需返回一個字符串function(msg){return ...},此項有默認值,請看下文示例
replyDone String 移除成功提示,字符串類型,默認成功時返回done
replyNoPermission String 無權限移除成員時機器人的回覆,即當一個不在adminList配置中的用户發出命令時回覆,默認不做出回覆

我們來看 adminList 數組的配置示例

adminList: [
  {
    // 管理員暱稱,用以區分,可選
    name: "isboyjc",
    // 管理員id,必填
    id: "wxid_nrsh4yc8yupm22",
  },
  {
    name: "工具人小楊",
    id: "wxid_vkovzba0b0c212",
  },
  ...
]
複製代碼

示例

const options = {
  // 觸發關鍵字數組
  keyword: ["飛機", "踢", "慢走", "不送"],
  // 管理員列表
  adminList: [
    {
      name: "isboyjc",
      id: "wxid_nrsh4yc8yupm22",
    },
    {
      name: "便便",
      id: "wxid_4mnet5yeqo5d21",
    },
    {
      name: "工具人小楊",
      id: "wxid_vkovzba0b0c212",
    }
  ],
  // 延時
  time: 3000,
  // 移除前提示,以下配置是默認配置,這裏用來展示函數類型配置
  // 可根據函數回調中msg消息實例參數自由發揮,也可直接填寫一段字符串
  replyInfo: function (msg) {
    return `您可能違反了社羣規則,並收到舉報,${this.time / 1000}s後將您移出羣聊,如有問題請聯繫管理!!!🚀\n\n移除原因:違反社羣規則\n操作時間:${dateTimeFormat()}\n操作管理員:${msg.from().name()}\n\nYou may have violated the community rules and received a report. After ${this.time / 1000}S, you will be removed from the group chat. If you have any questions, please contact the management!!!🚀\n\nReason for removal:Violation of community rules\nOperation time:${dateTimeFormat()}\nOperation administrator:${msg.from().name()}`
  },
  // 移除成功後提示
  replyDone: "移除成功",
  // 無權限人員觸發命令後回覆,可選項,默認不進行回覆
  replyNoPermission: "您暫時沒有權限哦,聯繫管理員吧😊",
}

bot.use(WechatyRoomRemove(options))
複製代碼

如下圖

查看更多詳細介紹請猛戳 👉 isboyjc/wechaty-room-remove - GitHub傳送門

wechaty-room-clock

簡介

在羣聊中打卡簽到,每次打卡簽到後累計打卡簽到次數+1,積分+1,每日只可打卡一次,打卡總數/積分總數/打卡日誌等等,可以用於積分贈送小禮品提升羣活躍度什麼的

你可能覺得這些操作需要用到數據庫,但是在我的理解中,微信機器人越簡單越便捷越好,而微信羣聊的數據量不是很大,一個插件的使用,需要額外配置很多東西是很麻煩的,所以,此插件採用了本地存儲,用了一個三方輕量化的基於 NodeJSON 文件數據庫 LOWDB,避免了數據庫這一繁瑣的配置

插件會自動在項目根目錄創建一個 [機器人名字].clock-logs 的文件夾,用以存放數據

其中 clock-logs-[年份].json 文件存儲的是打卡日誌,為避免讀寫操作數據量過大產生的負荷,所以每年會生成對應的 json 文件,這樣每個羣聊上限是 500 人,以5個羣聊為基礎,一年的打卡數據量也不會太大

其中 clock-logs-main.json 文件為主文件,存儲的是對應羣聊/對應用户的打卡簽到數據等等

當然,如果你有更好的想法,請務必告知哦

安裝

npm install wechaty-room-clock

// or

yarn add wechaty-room-clock
複製代碼

使用

const WechatyRoomClock = require("wechaty-room-clock")

bot.use(WechatyRoomClock(options))
複製代碼

如上所示,使用插件只要按需傳入配置對象 options 即可

Options 參數屬性 類型 簡介
keyword String|Array 觸發簽到的關鍵字,只有一個可以使用字符串類型,多個關鍵字使用數組類型,默認為 ["簽到", "打卡"]
success String|Function 打卡成功提示該用户的一句話,可為字符串類型,也可以是函數類型,函數類型時,有一個參數data,即當前羣成員在本地數據庫中的數據對象,函數最終需返回一個字符串function(data){return ...},此項默認值請看下文示例
repeat String|Function 重複打卡時提示該用户的一句話,可為字符串類型,也可以是函數類型,函數類型時,有一個參數data,即當前羣成員在本地數據庫中的數據對象,函數最終需返回一個字符串function(data){return ...},此項默認值為 “今日已簽到,請勿重複簽到”

參數 successrepeat 為函數類型時形參 data 示例

{
  // 該用户微信id
  "CONTACTID": "wxid_nrsh4yc8yupm22",
  // 該用户暱稱
  "CONTACTNAME": "isboyjc",
  // 該用户打卡總數
  "CLOCKNUM": 170,
  "CLOCKINFO": {
    // 該用户2020年打卡總數
    "2020": 69,
    // 該用户2019年打卡總數
    "2019": 101
  },
  // 該用户積分
  "INTEGRALNUM": 170
}
複製代碼

示例

let options = {
  // 此處為默認項配置,也可為一個字符串
  keyword: ["簽到", "打卡"],
  // 此處為默認項配置,也可為一個字符串
  success: (data) => {
    let str = "\n簽到成功\n"
    Object.keys(data.CLOCKINFO).map(
      (v) => (str += `${v}年累計簽到${data.CLOCKINFO[v]}次\n`)
    )
    return str + `共累計簽到${data.CLOCKNUM}次\n擁有${data.INTEGRALNUM}積分`
  },
  // 此處為默認項配置,也可為一個字符串
  repeat: (data) => `今日已簽到,請勿重複簽到`,
}

bot.use(WechatyRoomClock(options))
複製代碼

使用如下圖

查看更多詳細介紹請猛戳 👉 isboyjc/wechaty-room-clock - GitHub傳送門

TODO

看到這其實你可能回發現這個項目功能並不多,是的,所以 plugin 生態需要時間來發展,文中後面幾個插件是我開發的,都是些簡單的小插件,因為我的需求並不複雜,不過還是很希望接下來能自己做或者是説用上點好玩的插件 ,如果你有什麼奇思妙想,可以直接在 wechaty 官方這個倉庫的 issuse 中提出 👉 wechaty/wechaty-plugin-contrib/issues ,可能會有人幫你寫插件來實現哦,當然你也可以在其中尋找插件創意來自己實現

後面想做的幾個好玩的小插件,當然只是謀劃階段,因為要上班,業餘時間不多

  • 黑名單
    • 最近老遇到有些人在羣裏大量加好友推銷課程,所以尋思着做一個黑名單插件,通過記錄微信ID來監聽入羣的人,校驗是否在黑名單中,如果在的話直接移出,同時開放一個公共黑名單列表,大家一塊來搞
  • 羣數據推送
    • 每天有新人加「屏蔽違規字段專用」羣,有人退羣,特別是退羣的時候察覺不到,所以做一個插件每天定時推送羣數據,這個數據可能包括日內新入羣數量、退羣數量、聊天人數量及聊天數、聊天最積極人及數量、羣成員邀請好友入羣數量等等
  • QA問答
    • 技術交流羣免不了的提問,所以準備開一個 Github 倉庫,使用 issuse 管理每個問答,每個成功解決的問題將被收錄其中,使用 webhook 每個 issuse 在提交的時候將會被監聽到存放到列表中,在羣聊中監聽消息作為關鍵字,觸發列表中標題關鍵字或相似,返回對應鏈接或解答
  • 可視化管理面板
    • 目前對機器人所有的更改都是直接在代碼中,想做一個可視化的管理系統,管理機器人並擁有可視化的數據頁面方便我們隨時隨地查看羣數據,支持Web端和H5
    • 現在已經有一個類似的了 👉 WebPanel,大家也可以體驗一下,我是想開發一個更簡單便捷的,順帶做幾個數據統計的頁面,所以放到 TODO 裏了,有時間再説

最後

歡迎大家關注公眾號「不正經的前端」,是前端,又不只是前端,所以叫不正經的前端

也可以加機器人助手「圈子」體驗一波哦,同時也可以加入技術交流羣

我們不應該只是為了工作和賺錢而敲代碼,最後祝大家工作之餘,玩得開心