免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
python實現(xiàn)微信自動回復機器人+查看別人撤回的消息(部署到云服務器)

前言

  • 首先你的微信號能夠登錄網(wǎng)頁版微信,才能打造你的專屬個人微信號機器人,點擊跳轉(zhuǎn)網(wǎng)頁版微信登錄頁面

  • 類似的文章網(wǎng)上也都有,其實我也是受到別的文章的一些啟發(fā),因為不是每個人都想實現(xiàn)同樣的功能的,直接套用別人的代碼不嚴謹而且bug太多,于是就想自己動手從零開始實現(xiàn)一個屬于自己的微信機器人,不過呢,也大同小異吧。

  • 算下來前前后后加上寫這篇博客花了大概一周的時間,因為都是用零零散散的時間進行開發(fā)以及測試然后修改bug再加功能再開發(fā),這么一個循環(huán),從一開始的只能回復消息、到現(xiàn)在能夠:回復特定群聊消息、特殊群聊特殊處理、回復表情包、查看所有別人撤回的消息以及操控微信機器人等等等等。

好的,廢話不多說,接下來就開始吧。

一、準備

  1. python3.7(重中之重,后面會解釋)

  2. itchat(直接用pip命令安裝即可)

  3. jupyter notebook(隨意,用你最喜歡的編譯器即可,不過最后還是要把代碼放在一個py文件里)

  4. NLP實現(xiàn)一個聊天機器人(限于本人沒學過自然語言處理,并且空閑時間也不多,其實就是因為太難了。。那就只能先調(diào)用別人的接口啦)

二、開始

ps:詳情請看代碼注釋,若不想分函數(shù)來看也可以直接看完整代碼

  • 定義獲取好友的昵稱和好友的備注函數(shù)

def get_friendname():friends_name={} #存儲好友的微信昵稱和備注friends=itchat.get_friends(update=True) #返回的是一個存儲所有好友信息的列表,每個好友的信息都是用一個字典來存放for friend in friends[1:]: #第一個為自己,所以這里排除了自己friends_name.update({friend['UserName']:{'nickname':friend['NickName'],'remarkname':friend['RemarkName']}})return friends_name
  • 定義群聊信息的函數(shù)
    ps:這個獲取群聊信息的函數(shù)只能讀取到你保存到通訊錄中的群聊,那些沒有保存到通訊錄中的是顯示不出來的,不過不影響獲取群聊信息,它只是沒有顯示而已,后面添加特定群聊就算是沒有保存通訊錄的都是可以添加的,一樣可以回復特定群聊。

def get_username():chatrooms=itchat.get_chatrooms(update=True) #返回的是一個所有群聊的信息的列表,每個群聊信息都是用一個字典來存放user_name=[] #接收特定群聊@本人的消息,并回復;存放特定群聊的usernameall_user_name=[] #存放全部群聊的usernamevip=[] #存放特定群聊的名稱if os.path.exists('./vip.txt'):with open('./vip.txt','r',encoding='utf-8') as f:for i in f.read().split('\n')[:-1]:vip.append(i)for chatroom in chatrooms:all_user_name.append(chatroom['UserName'])if chatroom['NickName'] in vip:user_name.append(chatroom['UserName'])return all_user_name,user_name,vip
  • 定義獲取聊天機器人返回信息的函數(shù)點擊跳轉(zhuǎn)在線聊天機器人

def get_response(msg):url=''#看到請求url好像涉及到一些sessionid、userid等信息,可能直接復制會用不了什么的,所以你們直接去分析一下網(wǎng)頁即可拿到啦,把content參數(shù)format成msg即可headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}r=requests.get(url,headers=headers)response=re.findall('"body":{"fontStyle":0,"fontColor":0,"content":"(.*?)","emoticons":{}}}',r.text)[1].replace('\\r\\n','')return response
  • 定義獲取聊天機器人詞窮時要回復消息的函數(shù)

def get_words():words=[]if os.path.exists('./words.txt'):with open('./words.txt','r',encoding='utf-8') as f:for i in f.read().split('\n')[:-1]:words.append(i)return words
  • 定義注冊消息函數(shù)(重頭戲)

# 包括文本(表情符號)、位置、名片、通知、分享、圖片(表情包)、語音、文件、視頻@itchat.msg_register([TEXT,MAP,CARD,SHARING,PICTURE,RECORDING,ATTACHMENT,VIDEO],isFriendChat=True,isGroupChat=True) #監(jiān)聽個人消息和群聊消息def download_reply_msg(msg):global flag,sj,isrun,use_info #flag判斷要不要進入斗圖模式,sj控制斗圖的時間長短,isrun判斷是否啟動自動回復機器人(默認運行中),通過向傳輸助手發(fā)指令來控制,use_info說明文檔all_user_name,user_name,vip=get_username()#每次接受消息時要拿到當前規(guī)定的群聊和特定群聊信息,后面用來分別做處理words=get_words() #拿到當前自定義回復消息的信息now_time=int(time.time()) #記錄獲取這條消息的時間,后面處理撤回消息的時候用到b=[] #用來記錄已經(jīng)過了可以撤回的時間的消息if len(msg_dict) != 0:for key,value in msg_dict.items():if (now_time - value['time']) >= 125: #經(jīng)過驗證發(fā)現(xiàn)消息2分鐘之內(nèi)才能撤回,這里為了保險起見加多5秒鐘b.append(key)for eachkey in list(msg_dict.keys()):if eachkey in b: #要是過了撤回時間的消息是文件類型的就把它們刪除,避免增加不必要的磁盤空間,盤大的請隨意if 'file' in msg_dict[eachkey].keys():os.remove(msg_dict[eachkey]['file'])msg_dict.pop(eachkey)#---------------------------------------------------------#下面開始存儲各類消息,主要是用來查看別人撤回的消息,后面會用到if msg['Type'] in [MAP,SHARING]: #地圖或者分享old_id=msg['MsgId']link=msg['Url']msg_dict.update({old_id:{'type':msg['Type'],'data':link,'time':now_time}})elif msg['Type'] in [PICTURE,RECORDING,ATTACHMENT,VIDEO]:if msg['ToUserName'] != 'filehelper': # 避免給文件傳輸助手發(fā)文件也傳入字典,沒必要而且傳入字典只是為了防止撤回,況且它是沒有撤回的old_id=msg['MsgId']file='./保存的文件/'+ msg['MsgId'] + '.' + msg['FileName'].split('.')[-1]msg['Text'](file)msg_dict.update({old_id:{'type':msg['Type'],'file':file,'time':now_time}})else:file='./保存的文件/'+ msg['FileName']msg['Text'](file)elif msg['Type'] == CARD: #名片old_id=msg['MsgId']link=re.findall('bigheadimgurl="(.*)" smallheadimgurl',str(msg))[0]msg_content = '來自' + msg['RecommendInfo']['Province'] +msg['RecommendInfo']['City'] + '的'+ msg['RecommendInfo']['NickName'] + '的名片'    #內(nèi)容就是推薦人的昵稱和性別if msg['RecommendInfo']['Sex'] == 1:msg_content += ',男的'else:msg_content += ',女的'msg_dict.update({old_id:{'type':msg['Type'],'head':link,'data':msg_content,'time':now_time}})elif msg['Type'] == TEXT: #文本old_id=msg['MsgId']text=msg['Text']msg_dict.update({old_id:{'type':msg['Type'],'data':text,'time':now_time}})#---------------------------------------------------------#下面是自動回復消息的(一切回復邏輯都在這里)if msg['ToUserName'] != 'filehelper': # 避免給文件傳輸助手發(fā)消息也自動回復if isrun == '運行中......': #操控機器人的,想停就停,想啟動就啟動,不用關掉程序,而且不影響查看撤回消息的功能if msg['FromUserName'] in all_user_name:if msg['FromUserName'] in user_name: #當消息來自特定群聊時,下面代碼才會執(zhí)行if sj is not None:if int(time.time()) - sj >= 900: #斗圖時間:15分鐘flag=0sj=Noneif (msg['isAt'] is True)&(msg['Type'] == TEXT):myname='@' + re.findall("'Self'.*?'DisplayName': '(.*?)', 'KeyWord'",str(msg))[0] if re.findall("'Self'.*?'DisplayName': '(.*?)', 'KeyWord'",str(msg))[0] != '' else '這里填你自己的微信昵稱'if '帥哥來斗圖' in msg['Text']:flag=1sj=int(time.time())num=random.choice(os.listdir('./表情包'))msg.user.send('@img@./表情包/{}'.format(num))
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
簡易教程|為UCI機器學習庫引入簡單直觀的Python API(附代碼)
短信服務-API協(xié)議
春節(jié)期間圖個樂,玩玩微信自動回復
Python制作微信自動回復機器人,打游戲時自動回復女朋友消息
WinAPI簡單入門
VB api 中級
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服