微信聊天機器人[過年防信息轟炸、自動回覆拜年消息]

微信聊天機器人

背景

  • 想靜靜的擼會兒代碼(睡覺)
  • 學習一下

功能

  • 自動回覆好友拜年消息
  • 好友找你聊天時,圖靈機器人自動回覆
  • 羣裏被@時,圖靈機器人自動回覆
  • 統計有多少我的主動給你發拜年消息
  • 記錄把你拉黑的好友,方便清理微信好友列表
  • 自動發送拜年信息給全部沒有主動發你拜年消息的好友(若是你有朋友先發給你的話)

準備

  • python3
pip3 intall itchat

code

#!/usr/bin/env python3

import time
import itchat
import requests
import json
from itchat.content import *

blessing = ['祝願', '福', '快樂', '新年', '過年', '吉祥', '大吉', 'new year']  # 收到的祝福關鍵詞
send_me_friends = {}  # 不發送的好友微信名
set_time = '2019-02-01 00:00:00'  # 設置羣發時間
you_blessing = '祝願您在新的一年裏,全部的但願都能如願,全部的夢想都能實現,全部的等候都能出現,全部的付出都能兌現。'  # 你本身定義的新年祝福
blacklist_dict = {}
send_status = 0


@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
    global send_status
    if not send_status:
        if get_sys_time() >= set_stamp():
            send_status = 1
            send_msg(msg)

    # 當消息不是由本身發出的時候
    if not msg['FromUserName'] == myUserName:
        # 發送一條提示給文件助手
        itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %
                        (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),
                         msg['User']['NickName'],
                         msg['Text']), 'filehelper')
        for i in blessing:
            if i in msg['Text']:
                # 先給本身發的就加入列表,以後計時發送的時候就跳過這些用戶
                send_me_friends[msg['User']['NickName']] = msg['User']['RemarkName']
                return u'[主人比較懶,早早的去擼代碼(shuijiao)去了]機器人助理帶主人對您說:{}'.format(you_blessing)
            elif check_msg(msg):
                return
            else:
                continue
        return u'[Medivh的機器人助理]說:{}'.format(tuling(msg['Text']))


@itchat.msg_register(TEXT, isGroupChat=True)
def group_reply(msg):
    # 只有羣裏@本身的時候回覆,其餘忽視,包括@all
    if msg['IsAt']:
        itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %
                        (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),
                         msg['User']['NickName'],
                         msg['Text']), 'filehelper')
        return u'[Medivh的機器人助理]說:{}'.format(tuling(msg['Text']))


def send_msg(msg):
    # 若是都到你設置的時間了,仍是沒有人給你祝福,我看仍是洗洗睡吧
    friends = itchat.get_friends(update=True)
    for name in friends[1:]:
        if check_msg(msg):
            return
        if name.NickName not in send_me_friends:
            print('正在給{}發消息~'.format(name.NickName))
            itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %
                            (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),
                             'name.NickName', #
                             msg['Text']), 'filehelper')
            return u'{}'.format(you_blessing)
        else:
            pass
    return


def tuling(info):
    appkey = "e5ccc9c7c8834ec3b08940e290ff1559"
    url = "http://www.tuling123.com/openapi/api?key=%s&info=%s" % (appkey, info)
    req = requests.get(url)
    content = req.text
    data = json.loads(content)
    answer = data['text']
    return answer


def get_sys_time():
    sys_time = time.time()
    return sys_time


def set_stamp():
    # 將其轉換爲時間數組
    time_array = time.strptime(set_time, '%Y-%m-%d %H:%M:%S')
    # 轉換爲時間戳
    time_stamp = int(time.mktime(time_array))
    return time_stamp


def check_msg(msg):
    if msg['Text'] == '消息已發出,但被對方拒收了。':
        blacklist_dict[msg['User']['NickName']] = msg['User']['RemarkName']
        return True
    else:
        return False


if __name__ == '__main__':
    itchat.auto_login(hotReload=True)

    # 獲取本身的UserName
    myUserName = itchat.get_friends(update=True)[0]["UserName"]
    itchat.run()
    print('今年主動給你發送半年消息的有{}我的,名單以下:\n {}'.format(len(send_me_friends)
                                                 , send_me_friends))
    print('今年被拉黑了{}次,名單以下:\n {}'.format(len(blacklist_dict), blacklist_dict))

羣裏被@的效果

小窗口聊天效果

相關文章
相關標籤/搜索