文章

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.*

itchat-uos 项目地址

引入模块

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 进行授权