iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
Software Development

用 PHP 打造專屬於自己的 Telegram 聊天機器人吧!系列 第 27

【PHP Telegram Bot】Day27 - 防雷機器人(1):讓發出去的訊息隱藏吧

https://ithelp.ithome.com.tw/upload/images/20211006/20132916FjcYRire9H.png

有時候看動畫或小說看到很勁爆的地方,很想講但又不能明講,有防雷機器人的話就會很方便

來做一個可以用 * 符號標示要隱藏的字的機器人,安安*你*好 -> 安安█好,還有 * 符號前面是反斜線時跳過,安\*安你好 -> 安*安你好

把 *中間* 的文字找出來

要找到兩個 * 符號中間的文字滿容易的,用正規表示式 /\*(.*)\*/U 就能找出來,然後加上 lookbehind (?<!) 跳過前面有反斜線的,最後組合起來就像這樣 /(?<!\\)\*(.*)(?<!\\)\*/U

在 PHP 的字串中兩個反斜線 \\ 會變成一個反斜線 \,所以在 preg_match_all() 中要打四個反斜線 \\\\ 這樣才是 \\
https://ithelp.ithome.com.tw/upload/images/20211006/20132916mwNC3Ge76v.png
我們來看看有沒有抓對
https://ithelp.ithome.com.tw/upload/images/20211006/20132916U2XW4T0bKD.png
抓到之後要先做一些處理,我們要把抓到的字串中間的反斜線去掉
https://ithelp.ithome.com.tw/upload/images/20211006/20132916pwBTR3qOgD.png
$search 是待會要替換「原始字串」時用來作為「被替換字串」的,所以不做任何處理,$replace 就是去掉後的樣子
https://ithelp.ithome.com.tw/upload/images/20211006/20132916dXDLAwH7HK.png


把 *中間* 的文字換成黑框框

清乾淨後是把每個字都換成黑框框,作為待會「替換成的字串」
https://ithelp.ithome.com.tw/upload/images/20211006/20132916LC6gQvNU3E.png
黑黑一坨啥都看不見
https://ithelp.ithome.com.tw/upload/images/20211006/20132916al4n3EYI0U.png
既然兩種字串都蒐集到了,那當然就是把「原始字串」替換成一堆黑框框的字串啦

我們會需要兩種替換,一是只把 *中間* 的字換成黑框框,另一種是不管遇到什麼字都換成黑框框
https://ithelp.ithome.com.tw/upload/images/20211006/20132916lJIHXFX2lB.png
替換的結果
https://ithelp.ithome.com.tw/upload/images/20211006/20132916U9Ea5ESa4w.png


修改 processInlineQuery

再來就是要把這些換來換去的東東放進 processInlineQuery 啦

首先如果查詢的字串是空字串就顯示查看說明
https://ithelp.ithome.com.tw/upload/images/20211006/201329162qJhMInmRD.png
否則就來做字串替換,把剛剛那些東東塞進去
https://ithelp.ithome.com.tw/upload/images/20211006/20132916GN1dvsmOxL.png
最後是把 $results 做出來,如果 $search 不是空陣列,而且替換完的字串 $text_hide 不是空字串,那就回傳兩個結果,不然就只回傳 $text_hide_all
https://ithelp.ithome.com.tw/upload/images/20211006/20132916pNqnmBt1ag.png
寫完就可以來看看成果啦
https://ithelp.ithome.com.tw/upload/images/20211006/20132916Vq1uLHKz4b.png


上一篇
【PHP Telegram Bot】Day26 - 入群歡迎機器人(2):設定歡迎訊息
下一篇
【PHP Telegram Bot】Day28 - 防雷機器人(2):儲存與查看原始訊息
系列文
用 PHP 打造專屬於自己的 Telegram 聊天機器人吧!30

尚未有邦友留言

立即登入留言