daneas

我是铜梁视窗小编何跃,继门户网站采集、公众号智能响应之后,又踏入新的征程——微信个人号聊天机器人。

以下程序是粗狂版本,尚未接入平台数据库,所以只能开启简单的聊天和清早10点以前打招呼的功能。

更多功能请自行下载代码,安装python3以上环境试验以下。

基于itchat的各种接口和python语言,写个linux版本的微信好像也不是很难的哈?

 

 

主要程序部分

# coding=utf-8

import time
import datetime
import checklist
import tuling
import itchat
from itchat.content import *


@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
    print(msg)
    if msg[\'Text\'] == \'我通过了你的朋友验证请求,现在我们可以开始聊天了\':
        return \'我是铜梁视窗运营何跃,很高兴认识你。 我们平台提供商家活动营销策划、网络营销策划服务,如有需要呼叫18996069665\'
    else:
        return \'[小狗]\' + tuling.get_response(msg[\'Text\'], msg[\'FromUserName\'])


@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):
    print(msg)
    white_list = {
        "测试群": "@@9393335b11f120437a8e99f114994a1d352452944761a8c17652466c30463d29",
        "宝妈3群": "@@050c154296139ce5be557a0f07020be2900355628b54e1c331f444d6120b812f",
        \'铜梁生活馆砍价1群\': \'@@b56ed25d9369edf46c926584e29a194acf90c97a36e780e164d3f8d809f00537\'
    }
    if \'你是机器人\' in msg[\'Text\']:
        return \'我是他开发的聊天机器人,不信一起来聊到天荒地老!\'

    if msg[\'ActualNickName\'] in white_list.keys():
        if msg[\'IsAt\']:
            return \'@\' + msg[\'ActualNickName\'] + \'\u2005 \' + tuling.get_response(msg[\'Text\']) + \'[握手]\'
        else:
            return \'[小狗]\' + tuling.get_response(msg[\'Text\'], msg[\'FromUserName\'])


@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    localfile = \'file/\' + msg.fileName
    msg.download(localfile)
    typeSymbol = {
        PICTURE: \'img\',
        VIDEO: \'vid\', }.get(msg.type, \'fil\')
    return \'@%s@%s\' % (typeSymbol, msg.fileName)


@itchat.msg_register(FRIENDS)
def add_friend(msg):
    msg.user.verify()
    msg.user.send(\'我是铜梁视窗运营何跃,很高兴认识你。 我们平台提供商家活动营销策划、网络营销策划服务,如有需要呼叫18996069665\')


# 登陆后各种打招呼
def afterlogin():
    hour = datetime.datetime.now().hour
    if hour < 10:
        # 先给群打招呼
        ghelloword = \'亲们早上好,贝贝佳38女王节微商城秒杀正在进行中,更有10积分赢取1000元游乐券活动等你来拿哟!\'
        sayhitogroup(ghelloword)

        # 再个个人打招呼
        localtime = time.strftime("%Y-%m-%d", time.localtime())
        phelloword = \'亲爱的%s早上好啊[鲜花],今天是\' + localtime + \',星期\' + time.strftime("%w", time.localtime())
        phelloword += \'\n睁开眼睛看到你还在这里,感觉真好[爱],感谢有你一路陪伴[爱]\'
        sayhitofriend(phelloword, 1)
    else:
        print(\'过了10点不打招呼了\')


# 给所有群发消息
def sayhitogroup(msg):
    mpsList = itchat.get_chatrooms(update=True)[1:]
    print(mpsList)
    for it in mpsList:
        print(\'"\' + it[\'NickName\'] + \'":"\' + it[\'UserName\'] + \'"\')
        if checklist.cr(it[\'NickName\'], 1) == 1:
            itchat.send_msg(msg, it[\'UserName\'])


# 给所有人发消息
def sayhitofriend(msg, namepluse=0):
    friendslist = itchat.get_friends(update=True)[1:]
    for m in friendslist:
        print(\'"\' + m[\'NickName\'] + \'":"\' + m[\'UserName\'] + \'","headimgurl":"\' + m[\'HeadImgUrl\'] + \'"\')
        if checklist.cr(m[\'NickName\'], 0) == 1:
            if namepluse == 0:
                itchat.send_msg(msg, m[\'UserName\'])
            else:
                itchat.send_msg(msg % m[\'NickName\'], m[\'UserName\'])


itchat.auto_login(hotReload=True, loginCallback=afterlogin)

itchat.run(debug=True)

 

问题来了,有时候发消息一不小心就得罪人了怎么办!设置白名单啊,只有这些人可以收到,注意了,白名单记得写入数据库,不要用username,用nickname登记!记得每天要刷新群和个人号里面的好友名称哟

# 发送消息都要检查的,不然要出事儿,先列举一个白名单不能发,判断通过的就发了,这个后面怕是要搞动态获取列表哟
def cr(name, msgtype, whitelist=None):
    if whitelist == None and msgtype == 1:
        whitelist = [\'贝贝佳\', \'宝妈\', \'砍价\', \'生活群\', \'助力\']
    elif whitelist == None and msgtype == 0:
        whitelist = [\'a\', \'A\', \'T\', \'t\']
    if name in whitelist:
        return 1
    else:
        return 0

话说都是自动回复,没得机器人帮忙谁帮你回复呢?我用的图灵,觉得有点弱智,希望你能够找个更好的机器人反馈给我唷

# coding=utf8
import sys, os
import requests, json

try:
    with open(\'tuling.json\') as f:
        key = json.loads(f.read())[\'key\']
except:
    key = \'\'  # if key is \'\', get_response will return None
    # raise Exception(\'There is something wrong with the format of you plugin/config/tuling.json\')


def get_response(msg, userid):
    url = \'http://www.tuling123.com/openapi/api\'
    payloads = {
        \'key\': key,
        \'info\': msg,
        \'userid\': userid,
    }
    try:
        r = requests.post(url, data=json.dumps(payloads)).json()
    except:
        return
    if not r[\'code\'] in (100000, 200000, 302000, 308000, 313000, 314000): return
    if r[\'code\'] == 100000:  # 文本类
        return \'\n\'.join([r[\'text\'].replace(\'<br>\', \'\n\')])
    elif r[\'code\'] == 200000:  # 链接类
        return \'\n\'.join([r[\'text\'].replace(\'<br>\', \'\n\'), r[\'url\']])
    elif r[\'code\'] == 302000:  # 新闻类
        l = [r[\'text\'].replace(\'<br>\', \'\n\')]
        for n in r[\'list\']: l.append(\'%s - %s\' % (n[\'article\'], n[\'detailurl\']))
        return \'\n\'.join(l)
    elif r[\'code\'] == 308000:  # 菜谱类
        l = [r[\'text\'].replace(\'<br>\', \'\n\')]
        for n in r[\'list\']: l.append(\'%s - %s\' % (n[\'name\'], n[\'detailurl\']))
        return \'\n\'.join(l)
    elif r[\'code\'] == 313000:  # 儿歌类
        return \'\n\'.join([r[\'text\'].replace(\'<br>\', \'\n\')])
    elif r[\'code\'] == 314000:  # 诗词类
        return \'\n\'.join([r[\'text\'].replace(\'<br>\', \'\n\')])


if __name__ == \'__main__\':
    try:
        ipt = raw_input
        ipt = lambda: raw_input(\'>\').decode(sys.stdin.encoding)
    except:
        ipt = lambda: input(\'>\')
    while True:
        a = ipt()
        print(get_response(a, \'ItChat\'))

 

分类:

技术点:

相关文章: