import { FileBox } from "file-box"
import QrcodeTerminal from "qrcode-terminal"
import axios from "axios"
import { WechatyBuilder } from "wechaty"
const MESSAGE_KEY_WORDS = [
"乌托邦地质灾害气象",
"【今日天气及水情信息",
"乌托邦市气象",
]
// A群 特定人发的消息(含特定关键字)转发到 C群
const ORIGIN_MESSAGE_WECHAT_GROUP = "马克思救援工作群"
const ORIGIN_MESSAGE_LISTEN_USERNAME = "马克思指挥中心"
// B群 聊天消息含乌托邦政务短信 的转发到 C 群
const ORIGIN_MESSAGE_WECHAT_GROUP_REPEAT = "组长群"
const KEY_WORD = '乌托邦市气象'
// C群
const TO_MESSAGE_WECHAT_GROUP = "马克思交流群"
const ajax = async (url, param, type) => {
return new Promise((resolve, reject) => {
var axiosOption = {
method: type ? type : "get",
url: url,
data: param,
timeout: 0, // 10秒
headers: {
"Content-Type": "application/json;charset=utf-8",
},
}
axios(axiosOption)
.then(function (res) {
resolve(res)
})
.catch((error) => {
console.log(error)
})
})
}
const page = {
data: {
token: "bwT9c8eYI6AHu23EYofE8HOPZ7meY7",
signature: null,
wechaty: null,
},
async mounted() {
let m = this
await m.methods.wxjqrInit()
this.methods.wechatyInit()
},
methods: {
//微信机器人登录
wxjqrInit() {
return new Promise(async (resolve, reject) => {
let res = await ajax(
"https://chatbot.weixin.qq.com/openapi/sign/" +
page.data.token,
{
userid: 1,
},
"post"
)
page.data.signature = res.data.signature
resolve()
})
},
async wechatyInit() {
page.data.wechaty = WechatyBuilder.build()
page.data.wechaty
.on("scan", (qrcode, status) => {
QrcodeTerminal.generate(qrcode, {
// small: true,
})
})
.on("login", (user) => {
console.log("登录成功:" + user)
})
.on("message", async (msg) => {
page.methods.message(msg, false, 1)
})
.start()
},
async message(msg, isTest, role) {
let text = msg.text() //获取聊天内容
let room = msg.room() //获取房间信息
console.log("聊天内容: " + msg + ` ${msg.payload.text}`)
console.log("聊天内容: " + text)
console.log("房间信息: " + room)
let userNice = msg.talker()
let msgType = msg.type() //7 是文本 6是图片 8是视频 https://wechaty.js.org/zh/docs/api/message
if (text.length == 0 || !room || msgType != 7) {
return
}
if (room && text.length > 0) {
var topic = await room.topic() //房间名
console.log("房间名2: " + topic)
console.log("room的值是: " + room)
console.log("message.toString", msg.toString())
switch (role) {
case 1:
const isAboutGroupKeywords = MESSAGE_KEY_WORDS.find((item) => msg.toString().includes(item))
if (
msg.toString().includes(ORIGIN_MESSAGE_WECHAT_GROUP)
&& msg.toString().includes(ORIGIN_MESSAGE_LISTEN_USERNAME)
&& isAboutGroupKeywords
) {
// userEvent.init(room, text);
// 在这里自己设置一个room,例如:
let myRoom = await page.data.wechaty.Room.find({
topic: TO_MESSAGE_WECHAT_GROUP,
})
userEvent.init(myRoom, text)
}
if (
msg.toString().includes(KEY_WORD) && msg.toString().includes(ORIGIN_MESSAGE_WECHAT_GROUP_REPEAT)
) {
let myRoom = await page.data.wechaty.Room.find({
topic: TO_MESSAGE_WECHAT_GROUP,
})
userEvent.init(myRoom, text)
}
break
}
}
},
},
}
page.mounted()
//用户事件处理
var wechatyplay = null
const userEvent = {
setSize: 0,
async init(room, msg) {
console.log("调用init方法了")
let m = this
m.weixinChatbot(room, msg)
},
//微信机器人人
async weixinChatbot(room, text) {
await room.say(text)
},
ajax: ajax,
async sayImg(room, url) {
let m = this
let fileBox = FileBox.fromUrl(url)
await room.say(fileBox)
},
}
程序可以正常运行,但是有一个问题。关键词如果落在信息的后面:1、如果信息内容比较短,会正常转发;2、如果信息内容比较长,比方说200个字,则不会自动转发。
请帮我修正这个问题,并把完整代码发上来。