• 大小: 261KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: Python
  • 标签:

资源简介

基于itchat库和图灵机器人实现的微信聊天机器人

资源截图

代码片段和文件信息

from time import sleep

import requests
import itchat
import re
import pymysql

key = ‘d98dbc8b2f784ceb9e11640b87283a62‘ # 这里是你自己机器人的apikey
nickName = ‘小兔几‘ # 这里是昵称或群昵称,用于检测群聊是否被艾特
conn = pymysql.connect(host=‘localhost‘ user=‘root‘ passwd=‘123456‘ db=‘python‘)
cur = conn.cursor()

# 获取回复的内容
def get_response(msg):
    try:
        # 先从数据库查找
        pattern = re.compile(‘teach.*.*‘)
        match = pattern.match(msg)
        if match != None:
            receive = re.findall(r‘(.+)‘ msg)
            reply = re.findall(r‘.+(.+)‘ msg)
            teach(receive[0] reply[0])
            return “学到了“
        sql = “select reply from tuling where receive=‘“ + msg + “‘“
        cur.execute(sql)
        r = cur.fetchone()
        if r != None:
            print(‘==================================================‘)
            print(‘收到消息:‘ msg)
            print(‘回复消息:‘ r)
            return r
    except:
        pass

    # 数据库中没有再到图灵服务器上找
    # 构造要发送给服务器的数据
    apiUrl = ‘http://www.tuling123.com/openapi/api‘
    data = {‘key‘: key ‘info‘: msg ‘userid‘ : ‘wechat-robot‘}
    r = requests.post(apiUrl data=data).json()
    # 字典的get方法在字典没有‘text‘值的时候会返回None而不会抛出异常
    print(‘==================================================‘)
    print(‘收到消息:‘ msg)
    print(‘回复消息:‘ r.get(‘text‘))
    return r.get(‘text‘)

# 处理私聊消息
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
    reply = get_response(msg[‘Text‘])
    sleep(2)
    return reply

# 处理群聊消息
@itchat.msg_register(itchat.content.TEXT isGroupChat=True)
def tuling_reply(msg):
    # 针对手机版
    pattern = re.compile(‘.*@‘ + nickName + ‘( ).*‘)
    match = pattern.match(msg[‘Text‘])
    # 被艾特才回复
    if match != None:
        # 去掉艾特和名字,以此作为收到的消息
        r = msg[‘Text‘].replace(‘@‘ + nickName + “ “ ‘‘)
        reply = get_response(r)
        sleep(2)
        return reply

    # 针对电脑版
    pattern = re.compile(‘.*@‘ + nickName + ‘( ).*‘)
    match = pattern.match(msg[‘Text‘])
    # 被艾特才回复
    if match != None:
        # 去掉艾特和名字,以此作为收到的消息
        r = msg[‘Text‘].replace(‘@‘ + nickName + “ “ ‘‘)
        reply = get_response(r)
        sleep(2)
        return reply

    # 针对艾特放在最后
    pattern = re.compile(‘.*@‘ + nickName + ‘$‘)
    match = pattern.match(msg[‘Text‘])
    # 被艾特才回复
    if match != None:
        # 去掉艾特和名字,以此作为收到的消息
        r = msg[‘Text‘].replace(‘@‘ + nickName ‘‘)
        reply = get_response(r)
        sleep(2)
        return reply

# 教我说话。格式是(teach收到的消息回复的消息),英文逗号隔开,后面没有空格
def teach(receive reply):
    sql = “select * from tuling where receive=‘“ + receive + “‘ “
    cur.execute(sql)
    rs = cur.fetchone()
    if rs==None:
        sql2 = “insert into tuling(receive reply) values(‘“ + receive + “‘ ‘“ + reply+ “‘)“
    else:
        sql2 = “update tuling set reply=‘“ + reply + “‘ where receive=‘“ + receive + “‘“
    cur.execute(sql2)
    conn.commit()

# 为了让实验过程更加方便(修

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-15 06:03  tuling-wechat-master\
     文件          13  2019-01-15 06:03  tuling-wechat-master\.gitignore
     文件         816  2019-01-15 06:03  tuling-wechat-master\README.md
     文件        3710  2019-01-15 06:03  tuling-wechat-master\tuling-wechat.py
     文件        1432  2019-01-15 06:03  tuling-wechat-master\tuling-wechat2.py
     文件         826  2019-01-15 06:03  tuling-wechat-master\tuling.sql
     文件      278425  2019-01-15 06:03  tuling-wechat-master\wechat.jpg

评论

共有 条评论