11# wxBot [ ![ star this repo] ( http://github-svg-buttons.herokuapp.com/star.svg?user=liuwons&repo=wxBot&style=flat&background=1081C1 )] ( http://github.com/liuwons/wxBot ) [ ![ fork this repo] ( http://github-svg-buttons.herokuapp.com/fork.svg?user=liuwons&repo=wxBot&style=flat&background=1081C1 )] ( http://github.com/liuwons/wxBot/fork ) ![ python] ( https://img.shields.io/badge/python-2.7-ff69b4.svg )
22
3- Python包装Web微信实现的微信机器人框架。可以很容易地实现微信机器人。
3+ ** wxBot** 是用Python包装Web微信协议实现的微信机器人框架。
4+
5+ 目前的消息支持情况:
6+
7+ - [ ] 群消息
8+ - [x] 文本
9+ - [x] 图片
10+ - [x] 地理位置
11+ - [x] 个人名片
12+ - [x] 语音
13+ - [x] 动画
14+ - [ ] 语音电话
15+ - [ ] 红包
16+
17+ - [ ] 联系人消息
18+ - [x] 文本
19+ - [x] 图片
20+ - [x] 地理位置
21+ - [x] 个人名片
22+ - [x] 语音
23+ - [x] 小视频
24+ - [x] 动画
25+ - [ ] 视频电话
26+ - [ ] 红包
27+ - [ ] 转账
28+
29+
430
531Web微信协议参考资料:
632
@@ -10,10 +36,14 @@ Web微信协议参考资料:
1036
1137[ qwx: WeChat Qt frontend 微信Qt前端] ( https://github.com/xiangzhai/qwx )
1238
39+
1340## 1 环境与依赖
1441
15- 目前只能运行于Python 2环境 。
16- ** wxBot** 用到了Python ** requests** , ** pypng** , 以及 ** pyqrcode** 库,使用之前需要安装这三个库:
42+ 目前能运行于Python 3.4环境 。
43+
44+ ** wxBot** 用到了Python ** requests** , ** pypng** , 以及 ** pyqrcode** 库。
45+
46+ 使用之前需要所依赖的库:
1747
1848``` bash
1949pip install requests
@@ -22,13 +52,14 @@ pip install pypng
2252```
2353
2454## 2 快速开发
25- ### 2.1 代码
2655
27- 利用 ** wxBot** 最简单的方法就是继承WXBot类并实现handle_msg_all或者schedule函数,然后实例化子类并run。
56+ 利用 ** wxBot** 最简单的方法就是继承WXBot类并实现 ` handle_msg_all ` 或者 ` schedule ` 函数,然后实例化子类并调用 ` run ` 方法 。
57+
58+ ### 2.1 代码
2859
29- 以下的代码对所有来自好友的文本消息回复 "hi", 并不断向好友tb发送" schedule" 。
60+ 以下的代码对所有来自好友的文本消息回复 * hi * , 并不断向好友 * tb * 发送 * schedule* 。
3061
31- handle_msg_all函数用于处理收到的每条消息,而schedule函数可以做一些任务性的事情 (例如不断向好友推送信息或者一些定时任务)。
62+ ` handle_msg_all ` 函数用于处理收到的每条消息,而 ` schedule ` 函数可以做一些任务性的事情 (例如不断向好友推送信息或者一些定时任务)。
3263
3364``` python
3465# !/usr/bin/env python
@@ -58,66 +89,66 @@ if __name__ == '__main__':
5889
5990### 2.2 运行
6091
61- 直接用python运行代码(如运行测试代码test .py):
92+ 直接用 ` python ` 运行代码(如运行测试代码 *** test .py*** ):
6293
6394``` python
6495python test.py
6596```
6697
6798### 2.3 登录微信
6899
69- 程序运行之后,会在当前目录下生成二维码图片文件 qr.png ,用微信扫描此二维码并按操作指示确认登录网页微信。
100+ 程序运行之后,会在当前目录下生成二维码图片文件 *** qr.png*** ,用微信扫描此二维码并按操作指示确认登录网页微信。
70101
71- 如果运行在Linux下,还可以通过设置WXBot对象的conf [ 'qr'] 为' tty' 的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:
102+ 如果运行在Linux下,还可以通过设置 ** WXBot ** 对象的 ` conf ['qr']` 为 ` tty ` 的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:
72103
73104![ login_on_ubuntu] ( img/login_on_ubuntu.png )
74105
75106## 3 效果展示
76107
77- 测试代码test.py的运行效果 :
108+ 测试代码 *** test.py *** 的运行效果 :
78109
79110![ 向机器人发送消息] ( img/send_msg.png )
80111
81112![ 后台] ( img/backfront.jpg )
82113
83114## 4 接口
84- ### 4.1 handle_msg_all
115+ ### 4.1 ` handle_msg_all `
85116
86- handle_msg_all函数的参数msg是代表一条消息的字典 。字段的内容为:
117+ ` handle_msg_all ` 函数的参数 ` msg ` 是代表一条消息的字典 。字段的内容为:
87118
88119| 字段名 | 字段内容 |
89120| ----- | --- |
90- | msg_type_id | 整数,消息类型,具体解释可以查看 ** 消息类型表** |
91- | msg_id | 字符串,消息id |
92- | content | 字典,消息内容,具体含有的字段请参考 ** 消息类型表** ,一般含有type (数据类型)与data (数据内容)字段,type与data的对应关系可以参考 ** 数据类型表** |
93- | user | 字典,消息来源,字典包含name (发送者名称,如果是群则为群名称,如果为微信号,有备注则为备注名,否则为微信号或者群昵称)字段与id (发送者id)字段,都是字符串 |
121+ | ` msg_type_id ` | 整数,消息类型,具体解释可以查看 ** 消息类型表** |
122+ | ` msg_id ` | 字符串,消息id |
123+ | ` content ` | 字典,消息内容,具体含有的字段请参考 ** 消息类型表** ,一般含有 ` type ` (数据类型)与 ` data ` (数据内容)字段,` type ` 与 ` data ` 的对应关系可以参考 ** 数据类型表** |
124+ | ` user ` | 字典,消息来源,字典包含 ` name ` (发送者名称,如果是群则为群名称,如果为微信号,有备注则为备注名,否则为微信号或者群昵称)字段与 ` id ` (发送者id)字段,都是字符串 |
94125
95126
96127### 4.2 消息类型表
97128
98- | 类型号 | 消息类型 | content |
129+ | 类型号 | 消息类型 | ` content ` |
99130| ----- | --- | ------ |
100131| 0 | 初始化消息,内部数据 | 无意义,可以忽略 |
101132| 1 | 自己发送的消息 | 无意义,可以忽略 |
102- | 2 | 文件消息 | 字典,包含type与data字段 |
103- | 3 | 群消息 | 字典, 包含user (字典,包含id与name字段 ,都是字符串,表示发送此消息的群用户)与type、data字段 ,红包消息除外(只有type字段 ) |
104- | 4 | 联系人消息 | 字典,包含type与data字段 |
105- | 5 | 公众号消息 | 字典,包含type与data字段 |
106- | 6 | 特殊账号消息 | 字典,包含type与data字段 |
133+ | 2 | 文件消息 | 字典,包含 ` type ` 与 ` data ` 字段 |
134+ | 3 | 群消息 | 字典, 包含 ` user ` (字典,包含 ` id ` 与 ` name ` 字段 ,都是字符串,表示发送此消息的群用户)与 ` type ` 、 ` data ` 字段 ,红包消息除外(只有 ` type ` 字段 ) |
135+ | 4 | 联系人消息 | 字典,包含 ` type ` 与 ` data ` 字段 |
136+ | 5 | 公众号消息 | 字典,包含 ` type ` 与 ` data ` 字段 |
137+ | 6 | 特殊账号消息 | 字典,包含 ` type ` 与 ` data ` 字段 |
107138| 99 | 未知账号消息 | 无意义,可以忽略 |
108139
109140
110141### 4.3 数据类型表
111142
112- | type | 数据类型 | data |
143+ | ` type ` | 数据类型 | ` data ` |
113144| ---- | ---- | ------ |
114145| 0 | 文本 | 字符串,表示文本消息的具体内容 |
115146| 1 | 地理位置 | 字符串,表示地理位置 |
116- | 3 | 图片 | 字符串,图片数据的url,HTTP POST得到jpg文件格式的数据 |
117- | 4 | 语音 | 字符串,语音数据的url,HTTP POST得到mp3文件格式的数据 |
118- | 5 | 名片 | 字典,包含nickname (昵称),alias(别名),province(省份),city(城市), gender(性别)字段 |
119- | 6 | 动画 | 字符串, 动画url |
120- | 7 | 分享 | 字典,包含type (类型),title(标题),desc(描述),url(链接),from(来自 )字段 |
147+ | 3 | 图片 | 字符串,图片数据的url,HTTP POST请求此url可以得到jpg文件格式的数据 |
148+ | 4 | 语音 | 字符串,语音数据的url,HTTP POST请求此url可以得到mp3文件格式的数据 |
149+ | 5 | 名片 | 字典,包含 ` nickname ` (昵称), ` alias ` (别名),` province ` (省份),` city ` (城市), ` gender ` (性别)字段 |
150+ | 6 | 动画 | 字符串, 动画url, HTTP POST请求此url可以得到gif文件格式的数据 |
151+ | 7 | 分享 | 字典,包含 ` type ` (类型),` title ` (标题),` desc ` (描述),` url ` (链接),` from ` (源网站 )字段 |
121152| 8 | 视频 | 不可用 |
122153| 9 | 视频电话 | 不可用 |
123154| 10 | 撤回消息 | 不可用 |
@@ -128,52 +159,74 @@ handle_msg_all函数的参数msg是代表一条消息的字典。字段的内容
128159
129160### 4.4 WXBot对象属性
130161
131- WXBot对象在登录并初始化之后 ,含有以下的可用数据:
162+ ** WXBot ** 对象在登录并初始化之后 ,含有以下的可用数据:
132163
133164| 属性 | 描述 |
134165| ---- | ---- |
135- | contact_list | 当前用户的微信联系人列表 |
136- | group_list | 当前用户的微信群列表 |
137- | public_list | 当前用户关注的公众号列表 |
138- | special_list | 特殊账号列表 |
139- | session | WXBot与WEB微信服务器端交互所用的requests Session对象 |
166+ | ` contact_list ` | 当前用户的微信联系人列表 |
167+ | ` group_list ` | 当前用户的微信群列表 |
168+ | ` public_list ` | 当前用户关注的公众号列表 |
169+ | ` special_list ` | 特殊账号列表 |
170+ | ` session ` | ** WXBot ** 与WEB微信服务器端交互所用的 ** Requests ** ` Session ` 对象 |
140171
141172### 4.5 WXBot对象方法
142173
143- WXBot对象还含有一些可以利用的方法
174+ ** WXBot ** 对象还含有一些可以利用的方法
144175
145176| 方法 | 描述 |
146177| ---- | --- |
147- | get_icon(id) | 获取用户icon并保存到本地文件 img_ [ id] .jpg ,id为用户id (Web微信数据) |
148- | get_head_img(id) | 获取用户头像并保存到本地文件 img_ [ id] .jpg,id为用户id (Web微信数据) |
149- | get_msg_img(msgid) | 获取图像消息并保存到本地文件 img_ [ msgid] .jpg, msgid为消息id (Web微信数据) |
150- | get_voice(msgid) | 获取语音消息并保存到本地文件 voice_ [ msgid] .mp3, msgid为消息id (Web微信数据) |
151- | get_account_name(uid) | 获取微信id对应的名称,返回一个可能包含remark_name (备注名),nickname(昵称), display_name(群名称)的字典|
152- | send_msg_by_uid(word, dst) | 向好友发送消息,word为消息字符串,dst为好友用户id (Web微信数据) |
153- | send_msg(name, word, isfile) | 向好友发送消息,name为好友的备注名或者好友微信号,isfile为False时word为消息,isfile为True时word为文件路径 (此时向好友发送文件里的每一行) |
154- | is_contact(uid) | 判断id为uid的账号是否是本帐号的好友,返回True (是)或False (不是) |
155- | is_public(uid) | 判断id为uid的账号是否是本帐号所关注的公众号,返回True (是)或False (不是) |
178+ | ` get_icon(id) ` | 获取用户icon并保存到本地文件 *** img_ [ id] .jpg*** , ` id ` 为用户id (Web微信数据) |
179+ | ` get_head_img(id) ` | 获取用户头像并保存到本地文件 *** img_ [ id] .jpg*** , ` id ` 为用户id (Web微信数据) |
180+ | ` get_msg_img(msgid) ` | 获取图像消息并保存到本地文件 *** img_ [ msgid] .jpg*** , ` msgid ` 为消息id (Web微信数据) |
181+ | ` get_voice(msgid) ` | 获取语音消息并保存到本地文件 *** voice_ [ msgid] .mp3*** , ` msgid ` 为消息id (Web微信数据) |
182+ | ` get_account_name(uid) ` | 获取微信id对应的名称,返回一个可能包含 ` remark_name ` (备注名), ` nickname ` (昵称), ` display_name ` (群名称)的字典|
183+ | ` send_msg_by_uid(word, dst) ` | 向好友发送消息,` word ` 为消息字符串, ` dst ` 为好友用户id (Web微信数据) |
184+ | ` send_msg(name, word, isfile) ` | 向好友发送消息,` name ` 为好友的备注名或者好友微信号, ` isfile ` 为 ` False ` 时 ` word ` 为消息, ` isfile ` 为 ` True ` 时 ` word ` 为文件路径 (此时向好友发送文件里的每一行) |
185+ | ` is_contact(uid) ` | 判断id为 ` uid ` 的账号是否是本帐号的好友,返回 ` True ` (是)或 ` False ` (不是) |
186+ | ` is_public(uid) ` | 判断id为 ` uid ` 的账号是否是本帐号所关注的公众号,返回 ` True ` (是)或 ` False ` (不是) |
156187
157188
158189## 5 Example
159190
160- bot.py 用 ** [ 图灵机器人] ( http://www.tuling123.com/ ) ** API 以及 ** wxBot** 实现了一个自动回复机器人.
191+ *** bot.py*** 用 ** [ 图灵机器人] ( http://www.tuling123.com/ ) ** API 以及 ** wxBot** 实现了一个自动回复机器人.
161192
162193此机器人会回复来自联系人的消息,以及群里@此账号的消息。
163194
195+ 并且本帐号可以通过发送 * 退下* 、 * 走开* 、 * 关闭* 、 * 关掉* 、 * 休息* 、 * 滚开* 来关闭机器人的自动回复。
196+
197+ 也可以通过发送 * 出来* 、 * 启动* 、 * 工作* 来再次开启机器人的自动回复。
198+
164199群聊时需要将对应的群保存到联系人列表。
165200
166201群聊实现效果:
167202
168203![ 群聊] ( img/group_chat.png )
169204
205+ ![ 群聊后台] ( img/group_chat_backend.jpg )
206+
207+
208+ *** bot.py*** 的运行方法:
209+
210+ - 要接入图灵机器人API时:
211+
212+ 1 . 在[ 图灵机器人官网] ( http://www.tuling123.com/ ) 注册账号,申请图灵key: [ 图灵key申请地址] ( http://www.tuling123.com/html/doc/apikey.html )
213+
214+ 2 . 在 *** bot.py*** 文件所在目录下新建 *** conf.ini*** 文件,内容为:(key字段内容为申请到的图灵key)
215+
216+ ``` txt
217+ [main]
218+ key=1d2678900f734aa0a23734ace8aec5b1
219+ ```
220+
221+ 3. 运行 ***bot.py***
222+
223+ ```python
224+ python bot.py
225+ ```
170226
171- bot.py的运行方法:
172- 1 . 在[ 图灵机器人官网] ( http://www.tuling123.com/ ) 注册账号,申请图灵key: [ 图灵key申请地址] ( http://www.tuling123.com/html/doc/apikey.html )
173- 2 . 在bot.py文件所在目录下新建conf.ini文件,内容为(key字段内容为申请到的图灵key):
227+ - 不接入图灵机器人API时(此时机器人对联系人消息以及群里@自己的消息统一回复 *知道了* ):
228+ 1. 运行 ***bot.py***
174229
175- ``` txt
176- [main]
177- key=1d2678900f734aa0a23734ace8aec5b1
178- ```
179- 3 . 运行bot.py
230+ ```python
231+ python bot.py
232+ ```
0 commit comments