女朋友给你发微信,你能秒回吗?,尤其是在你敲代码敲到激情之时(emmmm,或者说杀的正爽时?),当然是 ———— 可以秒回的? ,才不屑于用图灵机器人什么的,我们程序员?自有办法,当然是python可以实现。
网上看了看,发现一个很有意思的库itchat
大致看了一下介绍,发现十分有用
它既可以接收你的message指令,还可以用itchat.send(**, 'filehelper')
发送你需要的内容了,我们可以将输入的命令让电脑执行,并接收命令返回的内容?,这不就解决问题了这简直就是一个宝库,我们可以实现很多有趣的功能?
实现控制电脑的cmd命令
os.popen(command)
command是你可以指定输入的指令
一般我们这样用
import os
command = 'help'
output = os.popen(command)
info = output.readlines()
a=[]
for line in info:
a.append(line.strip('/r'))
b=''.join(a)
print(b)
command指令可以自己改,当然你也可以在for循环里面直接输出line,不过会一行一行输出,不利于微信后端的获取和系统执行的效率,所以我们变成str类型,运行结果和在cmd的结果肯定是一样的,但是是以文字方式显示出来?
用这个能干什么呢,简单点,我们可以用来实现电脑的定时关机或者重启,举个栗子:1小时后自动关机,输入shutdown -s -t 3600,其中-s是关机,-t是定时,3600是3600秒。 shutdown -r 是重启,往深了说,查看网络连接,端口协议等,也是轻而易举的(手动滑稽)
实时屏幕
这里用到了cv2库,首先说一下安装代码:pip install opencv-python
要切记切记不是pip install cv2 ,我这里是3.6.5,也可能跟版本有关,安装是这样按,但是导入的时候我们用的是import cv2
原理是利用了cv2的屏幕捕捉,得到了电脑的实时屏幕,类似于截图的功能,说起来截图也可以使用win32,就是使用Windows自带的程序,但是一张图片就4M左右,执行效率虽然说是比比cv2要高一点,但是作为用户,其实不容易感受到差别,所以我选用了cv2,大致思路如下,详细代码在最后放出
import cv2
cap = cv2.VideoCapture(0)
ret, img = cap.read()
cv2.imwrite(filepath,img)
cap.release()
查看文件和传输文件
查看文件用cmd的dir命令就可以查看,但是稍微复杂了一点,有些不懂命令的就不能直接使用了,所以把两个放出来写了,另外发送文件用itchat.send_file(filepath,'filehelper')
这里有个小建议,先把文件后缀名显示出来再用这个程序?
先说查看文件
def list_folders_files(path):
list_folders = []
list_files = []
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_folders.append(file)
else:
list_files.append(file)
return (list_folders, list_files)
使用这个函数就可以得到指定路径(path)下的所有文件夹和文件了
再说一下传输文件
newpath = path.encode("utf-8").decode("utf-8")
itchat.send_file(newpath,'filehelper')
为什么要写第一句话呢?因为编码问题(令人特别特别头大的问题,在我另一个项目字频统计中也遇到了,但未解决☹️)感兴趣的可以在这查看Unicode之痛,简单的来说就是中文文字变成计算机可以识别的文字需要的步骤,但是这样还不行☹️,发送普通的英文文件是可以的,只要路径中有中文就不行,试了很久不行之后我看了看官方文档,发现了中文文件无法上传的办法
中文文件名文件上传
Q: 为什么中文的文件没有办法上传?
A: 这是由于requests的编码问题导致的。若需要支持中文文件传输,fields.py (py3版本见这里)文件放入requests包的packages/urllib3下即可
有的可能没有这个路径,建议用everything搜索一下fields.py这个文件然后再进行操作,注意:这一步如果未完成的话,程序中的传输文件可能会出问题
让你的电脑说话
这个可以搞恶作剧,非常有意思,假设你室友玩你电脑,电脑突然骂了他一句,这个就很有意思了??
在这里我用了win32,也就是Windows自带的程序
这个程序较为简单,给出代码
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
m='asfwagawgawg'
speak.Speak(m)
虽然声音有点怪怪的,但是起到效果了,可以试试让他说666,他会给你一个耿直的回复:六百六十六??
聊天
我居然忘了最关键的自动回复…
这个和之前的内容是分开的,之前的都属于filehelper的内容,现在是属于聊天内容,但这个我并没有做很多,朋友们可以自行添加啊,可以使用random.choice随机回复,她肯定察觉不出来?,或者可以更高级,做一个类似于人工智能的,识别的她的语句,然后回复相应的信息,这一点csdn的大佬很多,我这小白还不太会?,所以就没有那么深入去做这个
完整代码?
import itchat
import os
import time
import cv2
from PIL import ImageGrab
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
sendMsg = u"你好啊" #可以自己多写几条,随机发送
usageMsg = u"使用方法:(切记以下所有命令中路径注意一定要用 / 而不用 \ ,其中冒号必须为英文状态下的 :)\n"\
u"1.运行CMD命令:cmd xxx (xxx为命令)\n" \
u"-例子:1小时后自动关机,输入shutdown -s -t 3600,其中-s是关机,-t是定时,3600是3600秒。 shutdown -r 是重启\n" \
u"2.获取当前电脑用户:cap\n" \
u"3.获取桌面:screen\n" \
u"4.获取某个文件夹中的内容:folder + 路径 例如C:/Users/***/Desktop 常用路径\n" \
u"5.传输文件:file+路径 例如 file D:/*** \n" \
u"6.让电脑说话:voice + 内容\n" \
u"7.启用消息助手(默认关闭):ast\n" \
u"8.关闭消息助手:astc"
flag = 0 #消息助手开关
nowTime = time.localtime()
s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)
filename = s +'.txt'
myfile = open('C:\\Users\\***\\Desktop\\wechat\\chat_record\\'+filename, 'w')
def list_folders_files(path):
"""
返回 "文件夹" 和 "文件" 名字
:param path: "文件夹"和"文件"所在的路径
:return: (list_folders, list_files)
:list_folders: 文件夹
:list_files: 文件
"""
list_folders = []
list_files = []
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_folders.append(file)
else:
list_files.append(file)
return (list_folders, list_files)
@itchat.msg_register('Text')
def text_reply(msg):
global flag
message = msg['Text']
fromName = msg['FromUserName']
toName = msg['ToUserName']
s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)
if toName == "filehelper":
if message == "cap":
cap = cv2.VideoCapture(0)
time.sleep(0.5)
ret, img = cap.read()
temp=s+'.jpg'
cv2.imwrite('C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, img)
itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, 'filehelper')
cap.release()
if message[0:5] == "voice":
m = message.strip(message[0:6])
speak.Speak(m)
if message[0:6]== "folder":
path = message.strip(message[0:7])
temp=[]
(list_folders, list_files) = list_folders_files(path)
itchat.send('此路径下的文件夹有:', 'filehelper')
itchat.send('\n'.join(str(i) for i in list_folders), 'filehelper')
itchat.send('此路径下的文件有(包括其路径 方便复制):','filehelper')
for fileName in list_files:
if(path[-1]=='/'):
filePath = path + fileName
else:
filePath = path + '/' + fileName
string=(fileName+ ' ' + filePath)
temp.append(string)
itchat.send('\n'.join(str(i) for i in temp),'filehelper')
if message[0:4] == "file":
path = message.strip(message[0:5])
newpath = path.encode("utf-8").decode("utf-8")
itchat.send_file(newpath,'filehelper')
if message[0:3] == "cmd":
command = message.strip(message[0:4])
output = os.popen(command)
info = output.readlines()
a=[]
for line in info:
a.append(line.strip('\r'))
b=''.join(a)
itchat.send(b, 'filehelper')
if message == "screen":
a=ImageGrab.grab()
screen=s+'.jpg'
a.save(r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen)
itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen, 'filehelper')
if message == "ast":
flag = 1
itchat.send("消息助手已开启", "filehelper")
if message == "astc":
flag = 0
itchat.send("消息助手已关闭", "filehelper")
elif flag == 1:
itchat.send(sendMsg, fromName)
myfile.write(message)
myfile.write("\n")
myfile.flush()
if __name__ == '__main__':
itchat.auto_login()
itchat.send(usageMsg, "filehelper")
itchat.run()
注意:标注 ** 的是用户名,你也可以使用别的的路径
使用截图
这个cap我调整了好多次才没拍到我丑陋的宿舍
电脑屏幕的截图(快夸好看?):
我的一个智障室友
在本地保存的聊天文件:
我是根据时间命名的聊天记录,每开一次就会新增一个
之前查看的文件夹:
那就这样吧,而且我感觉我女朋友会打我,不怂!