itchat-uos库
itchat-uos
python版本 3.10.9
pip安装
itchat-uos版本利用统信UOS的网页版微信,可以让你绕过网页微信的登录限制。
1
2
pip install itchat-uos==1.5.0.dev0
pip install urllib3==1.*
引入模块
1
2
import itchat
from itchat.content import *
代码格式
@itchat.msg_register()函数
描述:用于注册处理不同类型的消息回调函数。该函数括号里可写参数。
例:
1
2
@itchat.msg_register([TEXT,MAP,PICTURE],isGroupChat=True)
def handle_msg(msg):
注册msg_type参数
消息类型可以是一个字符串或一个列表
1
2
3
4
5
6
7
8
9
10
11
12
'TEXT':文本消息
'MAP':地图消息
'CARD':名片消息
'NOTE':提示消息
'SHARING':分享消息
'PICTURE':图片消息
'RECORDING':语音消息
'ATTACHMENT':文件消息
'VIDEO':视频消息
'FRIENDREQUEST':好友请求消息
'SYSTEM':系统消息
注:如果消息类型未指定,则默认注册所有消息类型的消息
其他相关参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
isFriendChat:是否为好友之间的聊天,默认为True。
isGroupChat:是否为群聊,默认为False。
isMpChat:是否为公众号聊天,默认为False。
msg:接收到的消息内容。
picDir:接收到的图片、语音、视频、附件等文件的保存路径。
name:接收到消息的发送者或群聊名称。
username:接收到消息的发送者或群聊唯一标识。
ActualNickName:接收到消息的发送者昵称。
ActualUserName:接收到消息的发送者唯一标识。
Text:接收到的文本消息内容。
Url:接收到的链接消息内容。
Type:接收到的消息类型,如文本、图片、语音、视频、附件、好友请求、地图等。
Content:接收到的消息内容。
FromUserName:消息发送者的唯一标识。
ToUserName:消息接收者的唯一标识。MsgId:消息的唯一标识。
CreateTime:消息的创建时间戳。
NewMsgId:新消息的唯一标识。
msg对象属性取值(字典)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
msg字典中,存在以下几个嵌套的字典和它们包含的属性,以及每个属性的含义:
msg字典:
- 'MsgId': 消息ID,表示每条消息的唯一标识符。
- 'FromUserName': 发件人的用户名。
- 'ToUserName': 收件人的用户名。
- 'MsgType': 消息类型,表示消息的种类,例如文本消息、图片消息等。
- 'Content': 消息内容,表示消息的具体文本内容。
- 'Status': 消息状态,表示消息的状态,可能有不同的取值,具体含义可能因应用程序而异。
- 'ImgStatus': 图片状态,表示图片消息的状态,可能有不同的取值,具体含义可能因应用程序而异。
- 'CreateTime': 创建时间,表示消息的创建时间戳。
- 'VoiceLength': 语音消息的长度,表示语音消息的时长。
- 'PlayLength': 播放长度,表示消息的播放长度。
- 'FileName': 文件名,表示附加的文件的名称。
- 'FileSize': 文件大小,表示附加的文件的大小。
- 'MediaId': 媒体ID,表示媒体消息的唯一标识符。
- 'Url': 链接,表示消息中包含的链接地址。
- 'AppMsgType': 应用消息类型,表示应用消息的具体类型。
- 'StatusNotifyCode': 状态通知代码,表示状态通知的代码值。
- 'StatusNotifyUserName': 状态通知用户的用户名。
- 'ForwardFlag': 转发标志,表示消息的转发标志。
- 'HasProductId': 是否包含产品ID,表示消息是否包含产品ID信息。
- 'Ticket': 票据,表示与消息相关的票据信息。
- 'ImgHeight': 图片高度,表示图片消息的高度。
- 'ImgWidth': 图片宽度,表示图片消息的宽度。
- 'SubMsgType': 子消息类型,表示消息的具体子类型。
- 'NewMsgId': 新消息ID,表示新消息的ID。
- 'OriContent': 原始内容,表示消息的原始内容。
- 'EncryFileName': 加密文件名,表示加密的文件名。
- 'Type': 消息类型,表示消息的类型,例如文本消息、图片消息等。
- 'Text': 文本内容,表示消息的具体文本内容。
可以使用`msg['属性名']`或者'msg.属性名'直接取得对应值
msg中的嵌套字典:
1. `'RecommendInfo'` 字典:
- `'UserName'`:推荐用户的用户名。
- `'NickName'`:推荐用户的昵称。
- `'QQNum'`:QQ号码。
- `'Province'`:所在省份。
- `'City'`:所在城市。
- `'Content'`:推荐内容。
- `'Signature'`:个性签名。
- `'Alias'`:用户别名。
- `'Scene'`:场景。
- `'VerifyFlag'`:验证标识。
- `'AttrStatus'`:属性状态。
- `'Sex'`:性别。
- `'Ticket'`:票据。
- `'OpCode'`:操作代码。
2. `'AppInfo'` 字典:
- `'AppID'`:应用程序ID。
- `'Type'`:应用程序类型。
3. `'User'` 字典:
- `'MemberList'`:成员列表。
- `'Uin'`:用户ID。
- `'UserName'`:用户的用户名。
- `'NickName'`:用户的昵称。
- `'HeadImgUrl'`:用户头像的URL。
- `'ContactFlag'`:联系人标识。
- `'MemberCount'`:成员数量。
- `'RemarkName'`:备注名。
- `'HideInputBarFlag'`:隐藏输入栏标识。
- `'Sex'`:性别。
- `'Signature'`:个性签名。
- `'VerifyFlag'`:验证标识。
- `'OwnerUin'`:拥有者ID。
- `'PYInitial'`:拼音首字母。
- `'PYQuanPin'`:拼音全拼。
- `'RemarkPYInitial'`:备注拼音首字母。
- `'RemarkPYQuanPin'`:备注拼音全拼。
- `'StarFriend'`:星标好友标识。
- `'AppAccountFlag'`:应用账号标识。
- `'Statues'`:状态。
- `'AttrStatus'`:属性状态。
- `'Province'`:所在省份。
- `'City'`:所在城市。
- `'Alias'`:用户别名。
- `'SnsFlag'`:社交网络标识。
- `'UniFriend'`:是否为同一好友。
- `'DisplayName'`:显示名称。
- `'ChatRoomId'`:聊天室ID。
- `'KeyWord'`:关键字。
- `'EncryChatRoomId'`:加密的聊天室ID。
- `'IsOwner'`:是否为群主。
这些是嵌套的字典及其包含的属性,每个属性代表了相应信息的含义。您可以使用键名来访问这些属性,层层嵌套地使用类似 `msg['嵌套字典名']['属性名']`的方式获取对应的值。
接入openai模块
1
pip install openai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import itchat
from itchat.content import *
import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890" #设置代理地址
openai.api_key = "sk-key" #openai Key
#openai.api_base = "https://api.openai.com/v1"
#openai.api_proxy = "http://127.0.0.1:7890"
@itchat.msg_register(TEXT, isFriendChat=True)
def reply_to_friend(msg):
if msg['User']['NickName'] == '好友昵称': #msg['User']['NickName'] == '群昵称'
print(msg['Text'])
prompt = msg['Text']
model = "text-davinci-003"
response = openai.Completion.create(
engine=model,
prompt=prompt,
temperature=0.4,
max_tokens=512,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
reply = response.choices[0].text
itchat.send(reply, toUserName=msg['User']['UserName'])
itchat.auto_login()
itchat.run()
微信定时消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import itchat
from datetime import datetime
import time
def after():
# 返回用户信息的列表user_info[{'userName':'','昵称':'','微信号':'','备注名':'','头像':'','url':'','等'':''}]
user_info = itchat.search_friends(name='微信昵称')
# 将列表拆开变为字典,并取出字典里的值
user_name = user_info[0]['UserName']
while 1:
获取当前日期时间
a = datetime.now()
b = a.strftime('%Y/%m/%d %H:%M:%S')[11:]
if b in ['22:40:00']:
# 发送文字信息
itchat.send_msg('msg', user_name)
if b in ['22:41:00']:
# 发送文字信息
itchat.send_msg('msg', user_name)
if b in ['22:42:00']:
# 发送文字信息
itchat.send_msg('msg', user_name)
if b in ['22:43:00']:
# 发送文字信息
itchat.send_msg('msg', user_name)
if b in ['22:44:00']:
# 发送文字信息
itchat.send_msg('msg', user_name)
time.sleep(1)
#登录
itchat.auto_login(loginCallback=after)
itchat.run()
1
2
3
4
5
6
7
8
9
10
11
# 返回用户信息的列表user_info[{'Uin':'','UserName':'','NickName':'','HeadImgUrl':'','Signature':'','等':''}]
user_info = itchat.search_friends(name='好友昵称')
# 将列表拆开变为字典,并取出字典里的值(找到指定好友唯一标识符)
user_name = user_info[0]['UserName']
#给指定好友发送消息
itchat.send_msg('要发送的消息内容', user_name(发送对象))
# 登录微信,会弹出一个二维码,扫描登录网页版微信
itchat.login()
#第一次需要扫码,之后只需要手机端确认登录
itchat.auto_login(hotReload=True)
itchat.run()
防撤回、自动回复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from ctypes.wintypes import PINT
import re
import itchat
from itchat.content import *
#c创建空字典用来保存MsgId和消息类型数据
dat2 = {}
#c创建空字典用来保存MsgId和文本信息
dat = {}
@itchat.msg_register([TEXT, PICTURE,NOTE,RECORDING, ATTACHMENT, VIDEO], isFriendChat=True, isMpChat=True)
def handle_receive_msg(msg):
te = msg.text
ty = msg.type
if te == '收到红包,请在手机上查看' and ty == 'Note':
return '红包提醒'
#一部分;防撤回部分
if '撤回了一条消息' in msg['Content']:
#拿到撤回消息ID号
msd = re.search("\<msgid\>(.*?)\<\/msgid\>", msg['Content']).group(1)
#将字典中的信息与撤回消息ID进行比对得到值
for value in dat2.keys():
if value == msd:
a = dat2[value]
#将字典中的信息与撤回消息ID进行比对得到值
for value in dat.keys():
if value == msd and a == 'Picture':
return '撤回图片已保持:%s'% dat[value]
break
elif value == msd and a == 'Text':
return '撤回消息:%s'% dat[value]
break
elif value == msd and a == 'Video':
return '撤回视频已保持:%s'% dat[value]
break
elif value == msd and a == 'Recording':
return '撤回语音已保持:%s'% dat[value]
break
#文本
if msg.type == 'Text':
dat[msg.MsgId] = msg.text
dat2[msg.MsgId] = msg.type
#语音
if msg.type == 'Recording':
msg.download(msg.fileName)
dat[msg.MsgId] = msg['FileName']
dat2[msg.MsgId] = msg.type
#视频
if msg.type == 'Video':
msg.download(msg.fileName)
dat[msg.MsgId] = msg['FileName']
dat2[msg.MsgId] = msg.type
#图片
if msg.type == 'Picture':
msg.download(msg.fileName)
dat[msg.MsgId] = msg['FileName']
dat2[msg.MsgId] = msg.type
#二部分;自动回复
#对话仓库
mess = {'在吗':'[自动回复]不在!'}
#取出键
for value in mess.keys():
#监听消息与键相比
if msg.text == value:
#返回键值
return mess[value]
break
else:
return "未在对话消息队列![请发语音..]"
itchat.auto_login()
itchat.run()
本文由作者按照
CC BY 4.0
进行授权