【PHP Telegram Bot】Day25 - 入群欢迎机器人(1):发送欢迎讯息

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


<<:  DAY19 这边先帮你上一个按钮喔~(一)

>>:  十五分钟内介绍产品与服务

【左京淳的JAVA WEB学习笔记】第一章 软件下载与设定

比起JAVA档可以直接在命令列环境下进行练习和测试,JAVA WEB的专案就一定得在服务器(serv...

会话密钥(Session Key)

会话密钥可以用於在建立会话之後或在身份验证之後根据需要确保机密性和完整性。因此,主体的会话密钥最不可...

人工智慧搜寻引擎

想做一个像siri /Hey Google这样的人工智慧搜寻引擎,但是没怎麽碰过,想请教该从哪里开始...

[DAY8]制作容器(七)

会发生css路径的问题可能是因为override的部分没有设定好,所以再重作一个container ...

【教练我想写 C#】啊我就想用 VS Code 开发啊 !

最近因为工作的需求需要写 C#, 就是QA Q 到写 C# 的概念, 想说可以边学习边做个纪录顺便分...