微信聊天机器人

时间:2024-03-03 16:12:22

代码部分

新建一个名为wechatRobot.py的文件,内容如下:

import urllib.parse
import urllib.request
from os import remove

import itchat
import requests
from aip import AipImageClassify
from itchat.content import *


class Robot:

def __init__(self, whiteList, robot):
"""填写你的baidu-aip信息"""
APP_ID = \'你的APP_ID\'
API_KEY = \'你的API_KEY\'
SECRET_KEY = \'你的SECRET_KEY\'
self._client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
self._whiteList = whiteList
self._robot = \'tuling\' # 默认使用图灵机器人
self._pic_class = \'general\'

def run(self):
client = self._client
whiteList = self._whiteList

@itchat.msg_register(TEXT)
def text_reply(msg):
nickName = msg.user.nickName
if(msg.text[0:1]=="#"):
print(\'本人消息,忽略。\')
return
if(nickName not in whiteList):
print(\'非白名单用户\')
return
if(msg.text=="动物识别"):
self._pic_class = \'animal\'
return \'发张小动物的图看看~\'
elif(msg.text==\'呼叫小冰\'):
self._robot = \'ice\'
return \'我是小冰,什么事儿呀~\'
elif(msg.text==\'呼叫图灵\'):
self._robot = \'tuling\'
return \'我是图灵机器人,什么事儿呀~\'
else:
robotChat(msg)

def robotChat(msg): # 机器人选择
if self._robot==\'ice\':
iceChat(msg)
return
if self._robot==\'tuling\':
tulingChat(msg)
return

def iceChat(msg): # 微软小冰
print(\'ice chat\')
print(msg[\'Text\'])
chatter = msg.user
sendMsg = msg[\'Text\'].strip()
try:
r = requests.get(\'https://www4.bing.com/socialagent/chat?q=\' + sendMsg+\'&anid=123456\') #小冰接口
try:
r1 = r.json()
info = urllib.parse.unquote(r1[\'InstantMessage\'][\'ReplyText\'])
print(info)
chatter.send(info)
except Exception as e2:
print(e2)
except Exception as e:
print(e)

def tulingChat(msg): # 图灵机器人
print(\'tuling chat\')
print(msg[\'Text\'])
chatter = msg.user
sendMsg = msg[\'Text\'].strip()
try:
api_url = \'http://www.tuling123.com/openapi/api\'
data = {
\'key\': \'你的图灵机器人key\',
\'info\': sendMsg,
\'userid\': \'wechat-robot\',
}
r = requests.post(api_url, data=data)
try:
r1 = r.json()
info = r1.get(\'text\')
print(info)
chatter.send(info)
except Exception as e2:
print(e2)
except Exception as e:
print(e)

@itchat.msg_register(PICTURE)
def picture_reply(msg):
chatter = msg.user
msg.download(msg.fileName)
image = get_file_content(msg.fileName)
if(self._pic_class==\'general\'):
general(chatter, image)
elif(self._pic_class==\'animal\'):
animal(chatter, image)
self._pic_class = \'general\'
remove(msg.fileName)

# 通用识别
def general(chatter, image):
options = {}
options["baike_num"] = 5
info = client.advancedGeneral(image, options)
print(info)
root = info[\'result\'][0][\'root\']
keyword = info[\'result\'][0][\'keyword\']
baike_info = info[\'result\'][0][\'baike_info\']
reply_str = \'这是%s\n\' % keyword
if(baike_info):
reply_str += \'百科:%s\n\' % baike_info[\'description\']
reply_str += \'百科链接:%s\' % baike_info[\'baike_url\']
if(baike_info[\'image_url\']):
urllib.request.urlretrieve(baike_info[\'image_url\'], \'reply.png\')
chatter.send(\'@img@%s\' % \'reply.png\')
chatter.send(reply_str)

# 动物识别
def animal(chatter, image):
options = {}
options["top_num"] = 3
options["baike_num"] = 5
info = client.animalDetect(image, options)
print(info)
name = info[\'result\'][0][\'name\']
baike_info = info[\'result\'][0][\'baike_info\']
reply_str = \'这是%s\n\' % name
if(baike_info):
reply_str += \'百科:%s\n\' % baike_info[\'description\']
reply_str += \'百科链接:%s\' % baike_info[\'baike_url\']
if(baike_info[\'image_url\']):
urllib.request.urlretrieve(baike_info[\'image_url\'], \'reply.png\')
chatter.send(\'@img@%s\' % \'reply.png\')
chatter.send(reply_str)

# 读取图片
def get_file_content(filePath):
with open(filePath, \'rb\') as fp:
return fp.read()

itchat.auto_login(hotReload=True)
itchat.run()
再新建一个名为main.py的文件,内容如下:

from wechatRobot import Robot


whiteList = [\'昵称1\',\'昵称2\',\'昵称3\',\'昵称4\'] # 聊天白名单,名字是微信昵称

myRobot = Robot(whiteList=whiteList) # 创建一个自己的聊天机器人
myRobot.run(http://www.my516.com) # 启动聊天机器人
运行

在命令行输入:

python3 main.py
会弹出一个二维码,用手机微信扫描此二维码登录微信,之后你的微信账号就变成了聊天机器人,白名单中的用户和你聊天就会触发聊天机器人~

默认是图灵机器人跟你聊,如果你发送“呼叫小冰”,就会换成小冰跟你聊,如果再发送“呼叫图灵”,就会换回图灵机器人。
---------------------