Python如何撤回,python微信防撤回
本文实例为大家分享了大蟒实现微信防撤回神器的具体代码,供大家参考,具体内容如下
手写辛苦,希望给赞
#!/usr/local/bin/python3
#编码=utf-8
导入操作系统
进口是
导入时间
导入线程
导入itchat
从itchat.content导入*
# 可以撤回的消息格式:文本、语音、视频、图片、位置、名片、分享、附件
# 存储收到的消息
# 格式:{消息id:{消息发件人,消息收件人,消息时间,消息时间记录,消息类型,消息内容,消息共享url}}
msg_dict={}
# 存储消息中文件的临时目录,程序启动时,先清空
rev _ tmp _ dir=/用户/陈龙/D1/微信/rev/
如果不是os.path.exists(版本_临时目录):
os.mkdir(版本_临时_目录)
否则:
对于os.listdir(版本_临时目录)中的女:
path=os.path.join(rev_tmp_dir,f)
如果os.path.isfile(路径):
os.remove(路径)
# 表情有一个问题:消息和撤回提示的消息标识不一致
face_bug=无
# 监听微信消息(只限可撤回的消息类型),存储到本地,并清除超时的消息
# 可撤回的消息类型:文本、图片、地图、卡片、分享、记录、附件、视频、朋友、笔记
@ itchat。消息_寄存器([文字,图片,地图,卡片,分享,录音,附件,视频,好友,备注],
isFriendChat=True,isGroupChat=True,isMpChat=True)
定义处理程序_接收_消息(消息):
全局face_bug
消息时间版本=时间。strftime( % Y-% M-% d % H:% M:% S ,time.localtime())
msg_id=msg[MsgId]
msg_time=msg[CreateTime]
邮件共享网址=无
group_name=无
# 获取发送人
如果消息中有"实际昵称":
发件人信息=设置发件人群组聊天
msg _ from=sender _ info[ msg _ from ]
group _ name=sender _ info[ group _ name ]
否则:
msg _ from=(it聊天。search _ friends(userName=msg[ from userName ])[ remak name ]#优先使用备注
如果msg_from为无:
消息来源=消息来源用户名]
# 获取消息内容
如果msg[ Type ]= Text 或msg[ Type ]= Friends :
msg_content=msg[Text]
否则如果消息[类型]==记录或消息[类型]==附件\
或消息[类型]==视频或msg[类型]==图片:
msg_content=r msg[FileName]
消息[文本](版本_临时_目录消息[文件名])
elif msg[Type]==Card :
msg _ content=msg[推荐信息][昵称] r 的名片
elif msg[Type]==Map :
x,y,location=re.search(
2,
3)
如果位置为无:
msg_content=r 维度- x 经度是吗
否则:
msg_content=r 位置
elif msg[Type]==Sharing :
msg_content=msg[Text]
msg_share_url=msg[Url]
face_bug=msg_content
# 缓存消息
msg_dict.update({
消息id: {
消息来源:消息来源,
消息时间:消息时间,
消息时间版本:消息时间版本,
msg_type: msg[Type],
消息内容:消息内容,
消息共享url :消息共享url,
组名:组名
}
})
# 遍历本地消息字典,清除2分钟之前的消息,并删除缓存的消息对应的文件
极好的清除超时消息():
need_del_msg_ids=[]
对于消息_字典中的男:
msg _ time=msg _ dict[m][ msg _ time ]
if int(time.time()) - msg_time 120:
need_del_msg_ids.append(m)
if len(need_del_msg_ids) 0:
给我需要的人:
old_msg=msg_dict.get(i)
if old_msg[msg_type]==图片或旧消息[消息类型]==录像或旧消息[消息类型]==视频\
或旧消息[消息类型]==附件:
OS。remove(rev _ tmp _ dir old _ msg[ msg _ content ])
msg_dict.pop(一)
# 设置发送人,当消息是群消息的时候
def set_sender_group_chat(消息):
msg_from=msg[ActualNickName]
# 查找用户备注名称
朋友=it聊天。get _ friends(更新=真)
from_user=msg[实际用户名]
对于《老友记》中的女:
if from_user==f[UserName]:
msg _ from=f[ remakname ]或f[昵称]
破裂
群组=it聊天。获取聊天室(更新=真)
对于分组中的g:
如果消息[来自用户名]==g[用户名]:
group_name=g[昵称]
破裂
返回{ 邮件发件人:邮件发件人,组名:组名}
# 监听通知,判断是撤回通知,则将消息发给文件助手
@ it聊天。消息_寄存器([注意],isFriendChat=True,isGroupChat=True,isMpChat=True)
定义发送消息助手(消息):
全局face_bug
如果重新搜索(r ,消息[内容])不为无:
old_msg_id=re.search(\(.*?),msg[Content]).组(1)
旧_消息=消息_字典。get(旧消息id,{})
if len(old_msg_id) 11:
它聊天。send _ file(rev _ tmp _ dir face _ bug,toUserName=filehelper )
os.remove(rev_tmp_dir face_bug)
否则:
msg_body=old_msg.get(msg_from )撤回了old_msg.get(msg_type) \
消息\n \
old _ msg。get(消息时间版本) \ n \
old_msg.get(msg_content )
如果old_msg.get(group_name )不为无:
msg _ body=old _ msg。get(组名) 邮件正文
if old _ msg[ msg _ type ]= Sharing :
msg _ body= \ n old _ msg。get( msg _ share _ URL )
# 将撤回的消息发给文件助手
itchat.send(msg_body,toUserName=filehelper )
if old_msg[msg_type]==图片或旧消息[消息类型]==录像或旧消息[消息类型]==视频\
或旧消息[消息类型]==附件:
file= @ fil @ % s %(rev _ tmp _ dir old _ msg[ msg _ content ])
itchat.send(msg=file,toUserName=filehelper )
OS。remove(rev _ tmp _ dir old _ msg[ msg _ content ])
msg_dict.pop(old_msg_id)
if __name__==__main__ :
它聊天。auto _ log in(热重载=True,enableCmdQR=2)
itchat.run()
# 子线程清除超时消息
_线程。开始新线程(清除超时消息)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。