注意:建议用自己小号使用,避免风险,且新创建的微信号可能不支持使用,建议使用年份长一点的微信号

效果:
群聊功能:

微信聊天机器人接入ai

此源码功能介绍

1、本地运行后,自动开启3000端口,可以使用接口主动调用微信机器人,往指定群聊发送消息,示例如下:

2、群聊@机器人,如果输入摸鱼,则调用摸鱼网站,发送摸鱼信息

3、群聊@机器人,如果输入其他信息,则调用千帆AI,时间可能会稍长一点,因为需要等ai返回数据后,才进行回复

具体如何配置千帆AI信息,可以访问“墨水直达”小程序,文章搜索“百度千帆配置”查看具体流程

群聊示例如下:

安装步骤(windows):

1、将文件放到服务器上,或者本地电脑

2、安装node.js。双击“node-v16.20.2-x64.msi”

3、cmd 输入node -v 检查是否安装好

4、cmd 切换到你的文件目录。输入“npm install” 先安装依赖,比如:

5、运行程序

cmd继续输入:

node server.js

6、最后扫码登录即可,如果二维码显示不全,可以cmd选中二维码下方的路径,右键进行复制,然后浏览器访问,即可登录,

注意,代码需要改动的地方为:

 具体代码:
 

const { WechatyBuilder } = require('wechaty');
const qrTerm = require('qrcode-terminal');
const axios = require('axios'); // 确保您已安装axios
const bodyParser = require('body-parser');
const express = require('express');
const config = require('./config'); // 确保你有一个配置文件
const {
    sleep,
    transfer } = require('./utils')


let LOGIN_NAME = '';
// 待转发的群
var forwardRooms = [];
// 【群】转发锁
let isRoomBlock = false;

// 初始化Wechaty机器人
const bot = WechatyBuilder.build({
    name: 'wx-bot',
    puppet: 'wechaty-puppet-wechat',
    puppetOptions: {
        uos: true,
    },
});

// 定义扫码登录事件处理函数
function onScan(qrcode, status) {
    qrTerm.generate(qrcode, { small: true });
    const qrcodeImageUrl = [
        'https://wechaty.js.org/qrcode/',
        encodeURIComponent(qrcode),
    ].join('');
    console.log(qrcodeImageUrl);
}

// 定义登录成功事件处理函数
async function onLogin(user) {
    console.log(`${user}已上线o`);
    LOGIN_NAME = user.name();
    // 待转发内容的【群】,由于是异步事件,这里先提前获取
    config.topics.forEach(async topic => {
        let tempRoom = await bot.Room.find({ topic });
        forwardRooms.push(tempRoom);
    });
}

// 定义消息事件处理函数
async function onMessage(msg) {
    console.log("聊天者" + msg.talker().name());
    const text = msg.text(); // 聊天内容
    console.log("聊天内容" + text);
    const room = msg.room(); // 群消息
    console.log(room);
    const type = msg.type();

    if (text.includes(`=======================`)) {
        if (forwardRooms && forwardRooms.length > 0 && !isRoomBlock) {
            forwardRooms.forEach(room => {
                msg.forward(room);
                isRoomBlock = true;
            });
        }
    }
    if (msg.self()) return;

    if (room) {
        try {
            const isMentionSelf = await msg.mentionSelf(); // 是否@我了
            if (isMentionSelf || text.includes(`@${LOGIN_NAME}`)) {
                if (config.autoReply) {
                    if (type === bot.Message.Type.Text) {
                        // await sleep(2000);
                        var replyMessage = '';
                        //这里如果群里@我的内容包含摸鱼,则返回摸鱼网站内容,否则调用ai
                        if (text.includes(`摸鱼`)) {
                            const response = await axios.get('https://moyu.awsl.icu/api/moyu_json?day=10');
                            replyMessage = response.data; // 假设返回的数据是您要发送的消息
                            msg.say(replyMessage); // 在这里发送接口返回的消息
                        } else {
                            var aitext = text.replace(/@inkrobot/g, '');
                            //这里用的千帆大模型,需要具体配置教程请访问“墨水直达”小程序,文章搜索“百度千帆配置”查看具体流程
                            var options = {
                                'method': 'POST',
                                'url': 'https://qianfan.xxx改成你自己的接口',
                                'headers': {
                                    'Content-Type': 'application/json',
                                    'X-Appbuilder-Authorization': 'Bearer 加你自己的密钥'
                                },
                                data: JSON.stringify({
                                    "app_id": "自己的appid",
                                    "query": aitext,
                                    "conversation_id": "对话id",
                                    "stream": false
                                })
                            };
                            await axios(options)
                                .then(response => {
                                    //这里可能会有图片和ppt链接,
                                    let Link = '';
                                    response.data.content.forEach(item => {
                                        if (item.outputs && Array.isArray(item.outputs.urls) && item.outputs.urls.length > 0) {
                                            Link = item.outputs.urls[0]; // 假设只取第一个链接
                                        }
                                        if (item.outputs && typeof item.outputs.image === 'string') {
                                            Link = item.outputs.image; // 获取image链接
                                        }
                                    });
                                    msg.say(response.data.answer+Link); // 在这里发送接口返回的消息
                                })
                                .catch(error => {
                                    console.log("cuyo");
                                });
                        }
                    }
                }
            }
        } catch (error) {
            console.log('message-error', error);
        }
    }
}

// 定义登出事件处理函数
function onLogout(user) {
    console.log(`${user}已下线`);
}

// 定义错误事件处理函数
function onError(err) {
    console.log(`啊哦,出错了:(, ${err}`);
    bot.stop();
}

// 监听扫码、登录、消息等事件
bot.on('scan', onScan).on('login', onLogin).on('message', onMessage).on('logout', onLogout).on('error', onError);

// 启动Wechaty机器人
bot.start()
    .then(() => {
        console.log('Wechaty机器人启动成功');
        // 在Wechaty机器人成功登录后再启动Express服务器
        const app = express();
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({ extended: true }));

        // 定义发送消息的POST接口
        app.post('/sendMessage', async (req, res) => {
            const { roomName, message } = req.body;
            if (!roomName || !message) {
                return res.status(400).send('缺少roomName或message参数');
            }
            try {
                const room = await bot.Room.find({ topic: roomName });
                if (!room) {
                    return res.status(404).send('未找到指定的群');
                }
                await room.say(message);
                res.send('消息发送成功');
            } catch (error) {
                console.error('发送消息出错:', error);
                res.status(500).send('消息发送失败');
            }
        });

        // 启动Express服务器
        const port = process.env.PORT || 3000;
        app.listen(port, () => {
            console.log(`服务器正在运行在端口 ${port}`);
        });
    })
    .catch(err => {
        console.log('Wechaty机器人启动失败:', err);
        bot.stop();
    });

源码直接小程序里点获取资源即可获取

Logo

纵情码海钱塘涌,杭州开发者创新动! 属于杭州的开发者社区!致力于为杭州地区的开发者提供学习、合作和成长的机会;同时也为企业交流招聘提供舞台!

更多推荐