大家好攻谁,我是公號(hào)3分鐘學(xué)堂的郭立員酌儒!今天帶來的是:做一個(gè)能自動(dòng)聊天的腳本(源碼分享)
關(guān)于這個(gè)問題呢,問的人多了寫篇文章吧勺疼!
不啰嗦直接看需求啊:
就像這樣 回復(fù)三句話
這個(gè)腳本要實(shí)現(xiàn)的功能就是回復(fù)3句話,每一句根據(jù)對(duì)方的內(nèi)容進(jìn)行回復(fù),讓聊天的人覺得在和“真人”說話榴啸。
要制作這類型的腳本我們要解決幾個(gè)問題:
怎么精準(zhǔn)的識(shí)別對(duì)方輸入的內(nèi)容。
如何匹配預(yù)先準(zhǔn)備好的話術(shù)庫(kù)轨淌,實(shí)現(xiàn)準(zhǔn)確回復(fù)迂烁。
匹配話術(shù)中,關(guān)鍵詞的優(yōu)先級(jí)和不同語(yǔ)境的判斷(這一點(diǎn)難度大递鹉,可以不用考慮)
先來看看我做的效果吧:
文章最底部有源碼
代碼主要分成了兩大塊:內(nèi)容識(shí)別和匹配話術(shù)
1.內(nèi)容識(shí)別主要是通過獲取xml碼盟步,然后提取里面說的內(nèi)容,這里我用的是截取法躏结,在我基礎(chǔ)教程第22課已經(jīng)講過了址芯,不會(huì)的朋友可以去看一下。提取之后要判斷話術(shù)是不是對(duì)方說的窜觉,判斷的依據(jù)是話術(shù)在不在聊天窗口的左邊。
2.匹配話術(shù)我用的是查找文本功能北专。
上圖是我做的話術(shù)庫(kù)禀挫,每一行由兩部分組成:關(guān)鍵詞---回復(fù)的內(nèi)容
通過判斷對(duì)方說的話中是不是包含話術(shù)庫(kù)中的關(guān)鍵詞,如果包含那么就回復(fù)對(duì)應(yīng)的內(nèi)容拓颓。
比如例子中语婴,對(duì)方說:干啥呢,我的話術(shù)庫(kù)中有“干啥”這個(gè)關(guān)鍵詞驶睦,那么對(duì)方說的話中包含了我這個(gè)關(guān)鍵詞砰左,那么就回復(fù)對(duì)應(yīng)的話術(shù):“能聊污污的那種嗎?”
這個(gè)話術(shù)庫(kù)理論上是可以做無數(shù)條話術(shù)的场航,但是實(shí)際當(dāng)中是做不到缠导,因?yàn)闀?huì)有互相干擾,還是拿我這個(gè)話術(shù)為例溉痢,第3句的關(guān)鍵詞是“好”僻造,這個(gè)關(guān)鍵詞如果對(duì)方回復(fù)的是你好,其實(shí)也是可以匹配成功的孩饼,這里我為了避免這個(gè)問題髓削,我把“你好”放到第一位,優(yōu)先匹配镀娶,但是如果話術(shù)特別多立膛,就沒法通過簡(jiǎn)單的排序解決這個(gè)問題了。這種就需要根據(jù)不同語(yǔ)境梯码,做多套話術(shù)庫(kù)了宝泵。(想想都覺得麻煩!)
下面是重點(diǎn)了忍些,文章底部我會(huì)把源碼復(fù)制上來鲁猩,但是很多朋友就喜歡復(fù)制源碼直接用,完全不考慮兼不兼容的問題罢坝,那我這個(gè)代碼用的時(shí)候需要注意些什么呢廓握?
如果你的設(shè)備是雷電模擬器搅窿,分辨率480*800 dpi 160,app是QQ隙券,那么恭喜你男应,可以直接無腦復(fù)制使用了。
如果不是上面我說的情況娱仔,那就要注意了沐飘。
第一個(gè)要修改的地方:
上圖中是兩個(gè)非常重要的參數(shù),獲取方法如下
提取聊天窗口的xml牲迫,然后查找到對(duì)方說的文字耐朴,注意圖中標(biāo)藍(lán)的代碼,我們單獨(dú)提出來盹憎,然后簡(jiǎn)單分一下行筛峭。
找到resource-id后面的內(nèi)容com.tencent.mobileqq:id/chat_item_content_layout
這個(gè)就是第一個(gè)參數(shù),當(dāng)然不同app這個(gè)內(nèi)容是不一樣的陪每。
bounds后面有4個(gè)數(shù)字影晓,要第一個(gè)數(shù)字53,這個(gè)是第二個(gè)參數(shù)檩禾。
第二處要修改的是:
這兩個(gè)坐標(biāo)是為了激活輸入框和點(diǎn)擊發(fā)送按鈕的挂签,用的時(shí)候要根據(jù)自己的app,單獨(dú)用抓抓獲取對(duì)應(yīng)的坐標(biāo)盼产。
還有一些小細(xì)節(jié)要注意饵婆,我的話術(shù)庫(kù)是從第2行開始用的,因?yàn)榈谝恍杏形谋绢^戏售,默認(rèn)讀取會(huì)多一個(gè)問號(hào)啦辐,為了省事所以文字是從第2行開始,如果用我的代碼你也要把第一行空著蜈项。另外就是話術(shù)庫(kù)的路徑了芹关,我這里是雷電模擬器的共享路徑,你如果用在其他設(shè)備紧卒,改為對(duì)應(yīng)的路徑侥衬。
最后就是代碼了:
Import "shanhai.lua"
Dim hs=file.readlines("/sdcard/pictures/話術(shù)庫(kù).txt")
Do
dim m=識(shí)別內(nèi)容("com.tencent.mobileqq:id/chat_item_content_layout","53")
If Len(m) > 0 Then
For i = 1 To UBOUND(hs)
Dim x=split(hs(i),"---")
TracePrint x(0)
If InStr(1, m, x(0))>0 Then
TracePrint "我要回復(fù)的內(nèi)容是:"&x(1)
Delay 200
Tap 143, 739
Delay 300
InputText x(1)
Delay 200
Tap 450, 737
Exit for
End If
Next
Else
TracePrint "對(duì)方還沒有說話"
End If
Loop
Function 識(shí)別內(nèi)容(s,z)
Dim m=shanhai.getuixml()
Dim arr=split(m,s)
dim n=ubound(arr)
Dim x=utf8.InStrRev(arr(n-1),"text",-1)
Dim y=utf8.len(arr(n-1))
Dim k=utf8.mid(arr(n-1),x+6,y-x-20)
Dim d=utf8.InStrRev(m,k,-1)
Dim t=utf8.instr(d,m,"]")
If Len(k) > 0 Then
Dim a=utf8.mid(m,d+y-x-20,t-d)
If InStr(1, a, "["&z) > 0 Then
TracePrint "對(duì)方說的話是:"&k
識(shí)別內(nèi)容=k
Else
TracePrint "我說的話:"&k
識(shí)別內(nèi)容=""
End If
End If
End Function