嘟嘟社区

问下开发TG bot交互的问题


本帖最后由 深海空间 于 2022-4-25 09:51 编辑

之前一直使用的一个影视资料网站现在要求app才能使用,不想下载,所以打算手搓一个tg bot,发送编号后就去官网爬取对应的影片预览图返回来,现在基本能达到预期,但是目前是通过 "/指令 编号" 的形式查询,比如 /img fc2-222222;

现在我想要像botfather一样的交互,先发送指令过去,再发送内容,问题就是怎么判断第二次发送的就是我要查询的东西?

比如截图里的,我第一次/newbot,然后botfather会叫我输入一个名字,我输入123,我想问下他是怎么知道123是我回复给/newbot的名字?而不是回复给其他指令的?他是通过什么逻辑判断的?有没有开发过bot的大大佬呀

可以记一个缓存标记,标记的key是tg id之类的,缓存存在这个tg id的消息按照内容处理,不存在按照指令处理
指令就那几个 如果你发的内容跟指令字符串不匹配,那就默认为内容啊

再有就是,如果不是指令,判断下上次下发的是哪个指令,不就能关联上了

redis

请问下逻辑是把用户发送过来的东西都先记录起来,然后通过判断用户上一次输入的内容决定是否是回复给对应指令的吗?比如/newbot的时候,先存起来,然后用户第二次发送的内容(比如发了个ABC)时候如果查找到上次发送的是/newbot,那么就可以将ABC确定为用户要设置的机器人名字?我这样想对吗

helone 发表于 2022-4-25 09:27
可以记一个缓存标记,标记的key是tg id之类的,缓存存在这个tg id的消息按照内容处理,不存在按照指令处理 …

你看下是不是我5楼发的那种处理逻辑

woniu 发表于 2022-4-25 09:24
指令就那几个 如果你发的内容跟指令字符串不匹配,那就默认为内容啊

再有就是,如果不是指令,判断下上次 …

你看下是不是我5楼发的那种处理逻辑

查看对应tg bot api的conversation

例如telethon的
https://docs.telethon.dev/en/stable/quick-references/objects-reference.html?highlight=conversation#conversation

你把交互逻辑要改一下
换成会话。每个用户单独一个会话,而不是单独的 /order 这个形式
会话的话可以用redis也可以数据库,以sessionid形式这样的。就像,用户中心。
我是萌新

请你放心

tsdog 发表于 2022-4-25 10:01
你把交互逻辑要改一下
换成会话。每个用户单独一个会话,而不是单独的 /order 这个形式
会话的话可以用redi …

刚才我还在想,用户A发了指令,用户B内容,bot会把返回结果返回给B,你这种会话的逻辑刚好可以解决这个问题 海事loc大佬多