前言:
1、目前新注册的微信号不能上网页版微信了,而itchat等目前主流微信api接口都是用的网页微信,所以我只能用老号登陆,可是腾讯以后肯定会逐步关闭网页版(老号以后可能也不能用了),所以还是期望有大神能开发出pc版微信的api
2、我翻了网上很多的攻略,绝大部分都正确,但是实际使用却有问题,可能是itchat的版本更新所致,现在这个是我看了itchat的py文档补充写的,所以亲测可用
3、四则运算写了一个简单的,只能+ - * /,而且如果是4*5 + 20之类的,会误算成25,以后再修正吧
4、其实机器人如果用好的话,完全可以顶一个甚至多个人力,比如群里报数据,根据标准格式进行汇总统计并督促,不过因为1的原因,实际使用上有被封号的风险
效果图:
#coding=utf8
import itchat
from itchat.content import *
import re
# 在注册时增加isGroupChat=True将判定为群聊回复
@itchat.msg_register(TEXT, isGroupChat = True)
def groupchat_reply(msg):
'''
msg['Content'],信息内容
msg['FromUserName'],信息的发送方ID,如果是群信息的话就是群ID,是一长串数字,没有msg['NickName'],所以要用chatroom_dict()进行转化
msg['ActualNickName'],信息发送者的昵称,注意如果是群里的话就是群里信息的实际发送者
'''
d = chatroom_dict()
chatroom_id = msg['FromUserName']
chatroom_name = d[chatroom_id]
try:
if chatroom_name == '软件测试': #这里指定了群
text = msg['Content']
if re.search('.*?\d+.*', text):
answer = cal(text)
itchat.send('答案是:{}'.format(answer), toUserName=chatroom_id)
else:
QA_len = len(content_dict)
n = 0
for key, value in content_dict.items():
if key in msg['Content']:
itchat.send(value, toUserName=chatroom_id)
break
else:
n += 1
if n == QA_len:
itchat.send('我还不知道呀, 等我长大一点再回答你哦!', toUserName=chatroom_id)
get_new_question(msg['Content'])
else: continue
else:
pass
except:
pass
def chatroom_dict():
'''获得群的ID和群名称,并组合成字典'''
d = {}
chatrooms = itchat.get_chatrooms(update=True)
for chatroom in chatrooms:
d[chatroom['UserName']] = chatroom['NickName']
return d
def get_new_question(content):
'''把不在库里面的新问题保存到本地文件夹里'''
with open('new_question.txt', 'a', encoding='utf-8') as file:
file.write(content)
file.write('\r\n')
def cal(text):
'''简单的四则运算'''
if re.search('\D*(\d+\+\d+)\D*', text):
question = re.search('\D*(\d+\+\d+)\D*', text).group(1)
f_num, s_num = question.split('+')
answer = int(f_num) + int(s_num)
return answer
elif re.search('\D*(\d+-\d+)\D*', text):
question = re.search('\D*(\d+-\d+)\D*', text).group(1)
f_num, s_num = question.split('-')
answer = int(f_num) - int(s_num)
return answer
elif re.search('\D*(\d+\*\d+)\D*', text):
question = re.search('\D*(\d+\*\d+)\D*', text).group(1)
f_num, s_num = question.split('*')
answer = int(f_num) * int(s_num)
return answer
elif re.search('\D*(\d+/\d+)\D*', text):
question = re.search('\D*(\d+/\d+)\D*', text).group(1)
f_num, s_num = question.split('/')
answer = int(f_num) / int(s_num)
return answer
else:
return "太难了,我不会啊!"
content_dict = {
'你好': '你好',
'叫什么': '我叫图图',
'名字': '我叫图图',
'性别': '男孩子',
'几岁': '我今年3岁啦',
'算数': '会一点点',
'考': '放马过来!',
'聪明': '谢谢!',
'唱歌': '暂时还不会,以后会加强!',
'最爱': '肉肉!',
}
itchat.auto_login(True)
itchat.run()