本示例建立在oicq框架和node.js环境下
首先安装redis
以Ubuntu为例
apt update
apt install redis-server
##检查是否安装
redis-server
##启动服务
service redis-server restart redis-server redis-cli
安装node模块
定位到你的项目目录
yarn add redis
## or npm
npm install redis
相关代码
存储
//redis
const redis_l = require('redis');
const redis = redis_l.createClient( 6379, '127.0.0.1');
//监听消息
await redis.set(msg.fromGroup, msg.groupName); //对应群名加入redis
await redis.expire(msg.fromGroup, 300); //过期时间秒
await redis.set(msg.fromAccount, msg.nickname); //对应名字加入redis
await redis.expire(msg.fromAccount, 300); //过期时间秒
//根据类型分别做处理
if (msg.messageType == 'text') {
await redis.set(msg.fromGroup + msg.messageId, msg.message); //加入redis
await redis.expire(msg.fromGroup + msg.messageId, 300); //过期时间秒
} else if (msg.messageType == 'image') {
let messageImage = /https:\/\/(.*?)\]/g
let messageImg = msg.message.match(messageImage)
messageImg = String(messageImg).replace(/]/g, '');
await redis.set(msg.fromGroup + msg.messageId, messageImg); //加入redis
await redis.expire(msg.fromGroup + msg.messageId, 300); //过期时间秒
} else {
await redis.set(msg.fromGroup + msg.messageId, msg.message); //加入redis
await redis.expire(msg.fromGroup + msg.messageId, 300); //过期时间秒
}
获取
在监听撤回消息的方法里可获取到对应的数据
await redis.get(msg.fromGroup + msg.messageId, (err, redata) => {
console.log(redata)
//此时已经获取到了相应的数据,你可以对数据进行处理了
}
//比如检测到图片消息被撤回
let msg = {
fromGroup: data.group_id, //群
fromAccount: data.user_id, //用户id
// name: data.member.nickname, //该群员资料
operator: data.operator_id, //操作人
messageId: data.message_id, //消息id
recallTime: data.time
};
let msggroup,msgname,msgoperator
await redis.get(msg.fromGroup, (err, regdata) => {
msggroup = regdata
})
await redis.get(msg.fromAccount, (err, rendata) => {
msgname = rendata
})
await redis.get(msg.operator, (err, rendata) => {
msgoperator = rendata
})
await redis.get(msg.fromGroup + msg.messageId, (err, redata) => {
let recellMessage = '';
if (redata.indexOf('https:\/\/gchat.qpic.cn') > -1 || redata.indexOf('gif') > -1) {
recellMessage = [
segment.text('群:' + msggroup + '(' + msg.fromGroup + ')\n' +
'用户:' + msgname +'(' + msg.fromAccount + '),' + '图片消息被撤回' + '\n'
+ '操作人:' + msgoperator + ' ' + msg.operator + '\n' +
'图片:\n'),
segment.image(redata),
];
}
//事实上你可能需要指定一个发送的群,比如自己才看到的群就不会显得很突兀
}