文字被隐藏了看不到,总要有个方法能看到原本的文字吧,所以今天要来把「原始字串」找回来
首先我想知道使用者按了哪个选项,因为「隐藏部份文字」和「隐藏全部文字」要显示的「原始字串」不一样(安*安你好、安\*安*你*好),所以先到设定中把 Inline Feedback
设成 100%,如果忘记这是什麽的话可以回去看这篇文章 Day23 - Inline mode(内联模式):在输入框使用机器人
设定完後就来到昨天写的 $results
,来把 reply_markup
加在下方,记得两个 result 都要加按钮
加完就先来执行看看程序
查询时
发送隐藏讯息
按下按钮
看来 callback_query
里是没有「原始字串」的,而且 callback_data
最多只能放 64 Bytes,但是 inline_query
最多会有 256 characters,那就只好把「原始字串」储存起来,按下按钮时读取啦
https://core.telegram.org/bots/api#inlinekeyboardbutton
https://core.telegram.org/bots/api#inlinequery
因为会有很多则的隐藏讯息和很多颗按钮,为了在按下按钮时能找回「原始字串」,我们必须在按钮上做个记号,让我们知道要去哪里找「原始字串」,杂凑值 Hash 这个东东就非常适合,它就像是指纹一样,每个字串都会有一个自己专属的杂凑值,几乎找不到不同字串有相同的杂凑值,而且 PHP 中的 hash()
函式刚好会把杂凑值裁成 64 Bytes,另外要注意的是杂凑算法并不是加密,它是无法解密的,无法从杂凑值反推回「原始字串」
像这样取完 Hash 後填在 callback_data 就算是做好记号了
另一个也是差不多,不过多了清理的动作,一开始也有说到我想显示的字串
虽然说无法反推回去,但是可以将杂凑值当作是路标,沿着路标走就能找到储存起来的字串
有两个时机可以储存,一是在查询的时候就储存,另一个是发送出去时。如果选第一种的话就会一直不断储存用不到的杂凑值(查询时会回传很多字串),第二种的话就要让 Inline Feedback
一直是 100%(确保选择的结果有储存)。最後我是选了第二种
又来到熟悉的地方,这次要处理 chosen_inline_result
,再新增一个 elseif
和 processChosenInlineResult()
函式
因为有两种字串,如果刚刚把杂凑值填在 result_id
里就不知道是要存哪种了,所以不管怎样都要再算一次杂凑值,那不如就让 result_id
保持原样,然後用 result_id
来判断要用哪个「原始字串」和杂凑值
接着把杂凑值当作档名、原始字串放在档案中储存起来,这样就算是完成对应了
首先来执行程序看看新的按钮回传的讯息长怎样
来到 processCallbackQuery()
,加上一个条件:如果 data
是个杂凑值的档案,那就把档案读取的结果发送回去并且显示成讯息框,否则就显示「找不到资料」的快闪讯息
最後重新执行程序就能用按钮找回「原始字串」啦
这个是按了之前没存杂凑值的按钮
<<: Day23:今天来谈一下Azure Sentinel 中的查询记录
>>: DAY22 - 将作品发布出去吧 - 前端篇 (firebase)
D22. 题目练习UVA11565 #include <stdio.h> #includ...
K-means的中文有人称作集群分析,但是主要都还是讲英文,比较容易懂。 这分析方法跟KNN...
通常我们在写module的时候,会需要一些初始资料或是固定需要的资料,我们可以定义资料在创立Mode...
废话不多说,直接附上code 影片含有程序码详细解说,若有误再烦请告知,谢谢 资料下载处 libra...
继续昨天的内容,在建立订单後,如果是信用卡订单,api会回给一个付款页面, 在这个页面用测试资料付款...