本示例建立在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),
        ];
    }
    //事实上你可能需要指定一个发送的群,比如自己才看到的群就不会显得很突兀
}
最后修改:2021 年 10 月 22 日
如果觉得我的文章对你有用,请随意赞赏