微信机器人搭建开发使用WeChatFerry实现办公自动化,支持使用python、go、易语言等直接开发

大部分开源微信机器人项目非常复杂,且很难嵌入到自己的项目中而WeChatFerry可定制化非常高,整个代码使用也比较简单,下面介绍一款笔者正在使用的一款机器人,相比源代码稍微做了一些修改,同时本次也会讲到跨几门编程语言开发方式,WeChatFerry使用Python开发,也就是如果你熟悉Python可以直接使用Python直接开发,如果你不熟悉Python也可以使用Go语言进行开发,当然你可以可以使用易语言进行开发,本套源码里面我会提供Python源码、go语言开发Demo、易语言开发Demo方便开发者直接开发,可以选择你熟悉的编程,当然稍作修改你也可以实现使用php进行开发,该框架目前是完全免费的,近期测试大量机器人框架,最后选定这款,当然也有其他收费的框架,但是这款框架的功能完全足够使用,你只需要参照作者文章即可实现自己的机器人开发,注:新环境先养号,不然容易风控。

1、需要安装指定版本微信3.9.10.27,下面提供两个下载地址,任选其一,下载完成后直接安装

https://www.xsssql.com/wp-content/uploads/2024/10/WeChatSetup-3.9.10.27.zip
https://github.com/lich0821/WeChatRobot/releases/tag/v39.2.4.0

安装python安装 Python>=3.9(Python 12 需要自己编译依赖,慎选,本文使用的是例如 3.10.11 ,下载地址如下

https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe

然后解压源码 主程序源码

# 升级 pip
python -m pip install -U pip
# 安装必要依赖
pip install -r requirements.txt
# ChatGLM 还需要安装一个 kernel
ipython kernel install --name chatglm3 --user

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

安装完成后需要先启动Demo,如果你是go语言开发则直接在其他程序联合开发Demogo语言目录运行

go run main.go

然后直接运行main.py

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

 

然后扫码登录,登录成功后需要把自动更新功能取消

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

 

运行main.py后go语言可以得到如下提示

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

 

此时直接使用微信发消息测试,私聊可发送 任意文字,将收到回复如图

 

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

群聊可以发送 hello 或 你好  或@你登录的微信  将收到如图回复

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

 

争对go语言具体逻辑可在下面的代码片段自行开发即可

// 处理接收到的数据
func handleData(conn net.Conn, data []byte) {
	messageStr := string(data)
	parts := strings.Split(messageStr, "=_^||^_=")
	if len(parts) < 5 { // 如果成员不足 5 个则打印并返回
		fmt.Println("Invalid data received:", messageStr)
		return
	}

	// 创建 Message 结构体并赋值
	message := Message{
		PrimaryCmd:    parts[0],
		SecondaryCmd:  parts[1],
		WeChatGroupID: parts[2],
		WeChatID:      parts[3],
		WeChatMsg:     parts[4],
	}

	replyMsg := Message{
		PrimaryCmd:    "发送消息",
		WeChatGroupID: message.WeChatGroupID,
		WeChatID:      message.WeChatID,
	}

	// 处理不同类型的消息
	switch message.PrimaryCmd {
	case "收到闲聊":
		replyMsg.MsgType = 0
		replyMsg.WeChatMsg = "来自Go的回复,我收到一个闲聊信息,你好啊"
		sendData(conn, replyMsg)
	case "收到群聊":
		replyMsg.MsgType = 1
		switch message.WeChatMsg {
		case "hello":
			replyMsg.WeChatMsg = "来自Go的回复,你好啊,我现在在群里呢"
		case "你好":
			replyMsg.WeChatMsg = "666"
		}
		if replyMsg.WeChatMsg != "" {
			sendData(conn, replyMsg)
		}
	case "群聊被艾特":
		replyMsg.MsgType = 2
		replyMsg.WeChatMsg = "有什么事吗?"
		sendData(conn, replyMsg)
	}

	// 打印结构体内容
	fmt.Printf("Parsed Message: %+vn", message)
}

争对python用户可在"主程序源码"robot.py文件 下面代码片段直接开发相关功能

  def processMsg(self, msg: WxMsg) -> None:
        """当接收到消息的时候,会调用本方法。如果不实现本方法,则打印原始消息。
        此处可进行自定义发送的内容,如通过 msg.content 关键字自动获取当前天气信息,并发送到对应的群组@发送者
        群号:msg.roomid  微信ID:msg.sender  消息内容:msg.content
        content = "xx天气信息为:"
        receivers = msg.roomid
        self.sendTextMsg(content, receivers, msg.sender)
        """
        testinput = msg.roomid+"/"+msg.sender
        self.LOG.info("-----------------当接收到消息的时候,会调用本方法 @---------AAAAAAAAAAAA-----------"+testinput)
        # 群聊消息
        if msg.from_group():
            # 如果在群里被 @
            if msg.roomid not in self.config.GROUPS:  # 不在配置的响应的群列表里,忽略  收到正常的群聊消息
                self.LOG.info("-----------------在群里被 @---------777777777777-----------")
                tcpbotsend.tcp_send_data("收到群聊","",msg.roomid,msg.sender,msg.content) #将收到的数据通过TCP发送出去
                return

            if msg.is_at(self.wxid):  # 被@
                self.LOG.info("-----------------在群里被 @---------888888888888-----------")
                #self.toAt(msg)  被@接入机器人
                tcpbotsend.tcp_send_data("群聊被艾特","",msg.roomid,msg.sender,msg.content) #将收到的数据通过TCP发送出去

            else:  # 其他消息
                self.LOG.info("-----------------在群里被 @---------999999999999-----------")
                tcpbotsend.tcp_send_data("收到群聊", "",msg.roomid,msg.sender, msg.content)  # 将收到的数据通过TCP发送出去
                self.toChengyu(msg)

            return  # 处理完群聊信息,后面就不需要处理了

        # 非群聊信息,按消息类型进行处理
        if msg.type == 37:  # 好友请求
            self.autoAcceptFriendRequest(msg)
            tcpbotsend.tcp_send_data("好友请求", "", msg.roomid, msg.sender, msg.content)  # 将收到的数据通过TCP发送出去

        elif msg.type == 10000:  # 系统信息
            self.sayHiToNewFriend(msg)
            tcpbotsend.tcp_send_data("系统信息", "", msg.roomid, msg.sender, msg.content)  # 将收到的数据通过TCP发送出去

        elif msg.type == 0x01:  # 文本消息
            # 让配置加载更灵活,自己可以更新配置。也可以利用定时任务更新。
            self.LOG.info("-----------------收到文本消息--------------------111")
            if msg.from_self():
                if msg.content == "^更新$":
                    self.config.reload()
                    self.LOG.info("已更新")
            else:
                #self.toChitchat(msg)  # 闲聊  收到用户发送的普通文本消息  接入机器人处理
                self.LOG.info("----------------闲聊----------A444444444444----------")
                tcpbotsend.tcp_send_data("收到闲聊","",msg.roomid,msg.sender,msg.content) #将收到的数据通过TCP发送出去

争对易语言用户可在下面代码片段直接开发相关功能

.版本 2
.支持库 EThread

.子程序 TCP_收到数据
.参数 pSender, 整数型
.参数 dwConnID, 整数型
.参数 pData, 整数型
.参数 iLength, 整数型
.局部变量 局部_DATA, 字节集, , , UTF8数据
.局部变量 局部_队列, TCP队列
.局部变量 局部_收到数据分割, 字节集, , "0"
.局部变量 bot, 机器人消息

进入许可区 (全局_许可证_机器人)
全局_dwConnID = dwConnID
退出许可区 (全局_许可证_机器人)
局部_队列.TCP数据 = 到字节集 (“”)
局部_DATA = 指针到字节集 (pData, iLength)
局部_队列.TCP数据 = 局部_DATA
局部_队列.是否已处理 = 假
提示 (#换行符 + “收到TCP数据:” + 编码_Utf8到Ansi_通用 (局部_DATA) + #换行符)

局部_收到数据分割 = 分割字节集 (局部_DATA, 编码_Ansi到Utf8_通用 (“=_^||^_=”), )
.如果真 (取数组成员数 (局部_收到数据分割) ≥ 5)
    bot.一级指令 = 编码_Utf8到Ansi_通用 (局部_收到数据分割 [1])
    bot.二级指令 = 编码_Utf8到Ansi_通用 (局部_收到数据分割 [2])
    bot.微信群ID = 编码_Utf8到Ansi_通用 (局部_收到数据分割 [3])
    bot.微信ID = 编码_Utf8到Ansi_通用 (局部_收到数据分割 [4])
    bot.微信消息 = 编码_Utf8到Ansi_通用 (局部_收到数据分割 [5])
    bot.微信消息 = 删首尾空 (子文本替换 (bot.微信消息, “?”, “”, , , 真))
    .如果真 (bot.一级指令 = “收到闲聊”)
        提示 (“机器人一级指令:” + bot.一级指令)
        bot.消息类型 = 0  ' 0=收到闲聊 1=收到群聊 2=群聊被@
        回复微信消息 (“发送消息”, “”, bot.微信群ID, bot.微信ID, “来自易语言的回复,我收到一个闲聊信息,你好啊”, , bot.消息类型)  ' 发送消息   为固定的  Python 收到前面几个字为发送消息说明要给用户发送消息了  二级指令 填写空  方便二次开发的时候 发送消息里面处理更多事

        返回 ()
    .如果真结束
    .如果真 (bot.一级指令 = “收到群聊”)
        提示 (“机器人一级指令:” + bot.一级指令)
        bot.消息类型 = 1  ' 0=收到闲聊 1=收到群聊 2=群聊被@
        .如果真 (bot.微信消息 = “hello”)  ' 只有收到hello的时候才回复
            回复微信消息 (“发送消息”, “”, bot.微信群ID, bot.微信ID, “你好啊,我在群里的”, , bot.消息类型)  ' 发送消息   为固定的  Python 收到前面几个字为发送消息说明要给用户发送消息了  二级指令 填写空  方便二次开发的时候 发送消息里面处理更多事
        .如果真结束
        .如果真 (bot.微信消息 = “你好”)  ' 在群里面收到你好的时候  回复 666
            回复微信消息 (“发送消息”, “”, bot.微信群ID, bot.微信ID, “666”, , bot.消息类型)  ' 发送消息   为固定的  Python 收到前面几个字为发送消息说明要给用户发送消息了  二级指令 填写空  方便二次开发的时候 发送消息里面处理更多事
        .如果真结束

        返回 ()

    .如果真结束
    .如果真 (bot.一级指令 = “群聊被艾特”)
        提示 (“机器人一级指令:” + bot.一级指令)
        bot.消息类型 = 2  ' 0=收到闲聊 1=收到群聊 2=群聊被@
        ' 当在群里有人@你时  回复 有什么事吗?
        回复微信消息 (“发送消息”, “”, bot.微信群ID, bot.微信ID, “有什么事吗?”, , bot.消息类型)  ' 发送消息   为固定的  Python 收到前面几个字为发送消息说明要给用户发送消息了  二级指令 填写空  方便二次开发的时候 发送消息里面处理更多事

        返回 ()
    .如果真结束

如果你不会go语言或python可直接使用易语言进行开发提示,运行 机器人发送信息Demo.e  如图 点击发送消息给用户即可发送想要的消息,然后具体逻辑自行开发

开发微信机器人WeChatFerry开发实现办公自动化,支持使用python、go、易语言等直接开发

 

完整的源码如下:

机器人框架

https://www.xsssql.com/wp-content/uploads/2024/10/机器人框架.zip

 

最后由于时间关系,文章没有写java用户demo,java或其他编程用户,只需在本机监听TCP监听8866端口后运行main.py,即可接收到用户发来的消息,如果需要给用户发送消息可以使用TCP按照如下连接字符串发送即可

发送消息=_^||^_=null=_^||^_=群IDl=_^||^_=微信id=_^||^_=要发送的内容=_^||^_=

 

参考资料

https://github.com/lich0821/WeChatFerry
https://github.com/lich0821/wcf-client-rust
https://github.com/lich0821/WeChatRobot
https://github.com/microsoft/vcpkg/releases
https://mp.weixin.qq.com/s/CGLfSaNDy8MyuyPWGjGJ7w
https://github.com/CliffHan/wechat-bot

 

 

 

 

0x01 阅读须知
技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
THE END
分享
二维码
海报
微信机器人搭建开发使用WeChatFerry实现办公自动化,支持使用python、go、易语言等直接开发
大部分开源微信机器人项目非常复杂,且很难嵌入到自己的项目中而WeChatFerry可定制化非常高,整个代码使用也比较简单,下面介绍一款笔者正在使用的一款机器人,相比源代码稍微做了一些修改,同时本次也会讲到跨几……
<<上一篇
下一篇>>