人狠話不多,根據ITCHAT接口編寫的一個微信個人號聊天機器人,基於這個基礎做個LINUX版本的微信也是信手拈來


我是銅梁視窗小編何躍,繼門戶網站采集、公眾號智能響應之后,又踏入新的征程——微信個人號聊天機器人。

以下程序是粗狂版本,尚未接入平台數據庫,所以只能開啟簡單的聊天和清早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'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM