iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0

https://ithelp.ithome.com.tw/upload/images/20211004/201329161fo4Ds8HwU.png

看了五天的 API 文件,想必是有點膩了,今天開始來做點實用的東西

修改 processMessage

首先來到 processMessage(),來把之前的轉換 Markdown 加個條件,只處理 !md 開頭訊息
https://ithelp.ithome.com.tw/upload/images/20211004/20132916CQNHnNoZ3k.png
改完來試試看,確實有在運作
https://ithelp.ithome.com.tw/upload/images/20211004/2013291699CRUGBHN3.png


找出 new_chat_members

https://core.telegram.org/bots/api#message
https://ithelp.ithome.com.tw/upload/images/20211004/20132916U8W1XbiG5t.png
new_chat_members 是 TG 伺服器傳過來的 message 中其中一個參數,他會在新成員加入時附在裡面,因為有可能一次進來很多個人,所以它是一個陣列,實際收到的訊息長這個樣子
https://ithelp.ithome.com.tw/upload/images/20211004/20132916r1x2Kky9LK.png
要找到它其實滿容易的,就在 message 的第一層,然後要處理到每個人就要用 foreach,還有如果是機器人的話就不處裡
https://ithelp.ithome.com.tw/upload/images/20211004/20132916AmwhtxH7Lt.png


組合 歡迎訊息

https://ithelp.ithome.com.tw/upload/images/20211004/20132916Oth9LhvNZf.png
這邊先在整個程式的最後面測試組合好的訊息

fixMarkdown() 是因為名字和 username 中會有奇怪的符號,導致被當成 Markdown 語法
https://ithelp.ithome.com.tw/upload/images/20211004/20132916D0FoG6n1BS.png
具體是哪些符號官方文件有寫
https://ithelp.ithome.com.tw/upload/images/20211004/20132916mNxr67VOBY.png
{chat_title} {user_id} {name} {username} 這四樣東東是為了讓設定時比較方便,最後再用 str_replace() 換成變數
https://ithelp.ithome.com.tw/upload/images/20211004/20132916jvHhsB4bm9.png
要注意的是除了小括號以內的網址,其他有半形符號的地方都建議加上反斜線 \
https://ithelp.ithome.com.tw/upload/images/20211004/201329164nLv8jXLHh.png
變成
https://ithelp.ithome.com.tw/upload/images/20211004/20132916sKnqar7v31.png
打完程式就按下執行看看吧
https://ithelp.ithome.com.tw/upload/images/20211004/20132916j9su1IFghQ.png
如果有看到訊息就表示成功了

底下這則訊息是因為 . 沒加到反斜線 \

Request has failed with error 400: Bad Request: can't parse entities: Character '.' is reserved and must be escaped with the preceding '\'

把 歡迎訊息 塞進 new_chat_members

https://ithelp.ithome.com.tw/upload/images/20211004/20132916sKBQLRVmpO.png
貼進去之後要把四個東東填進去

  1. 群組的名稱

    $message['chat']['title']
    
  2. 使用者的 uid

    $new_member['id']
    
  3. 使用者的名字

    因為「姓」跟「名」有可能不存在,不存在的話就換成空字串

    ($new_member['first_name'] ?? '') . ($new_member['last_name'] ?? '')
    
  4. 使用者的 username

    跟名字一樣有可能不存在,如果存在就加上 @ 還有小括號

    isset($new_member['username']) ? '(@' . $new_member['username'] . ')' : ''
    

完成後就等待新成員加入吧
https://ithelp.ithome.com.tw/upload/images/20211004/20132916E0ppuJHrv8.png


上一篇
【PHP Telegram Bot】Day24 - InlineKeyboardMarkup、Deep Link:來玩玩訊息下方的按鈕吧
下一篇
【PHP Telegram Bot】Day26 - 入群歡迎機器人(2):設定歡迎訊息
系列文
用 PHP 打造專屬於自己的 Telegram 聊天機器人吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言