Taosky/telegram-search-bot

有无考虑过支持webhook模式

deskmonster opened this issue · 7 comments

目前机器人使用的是polling模式,考虑到一个机器人只能服务一个群组,如果开启很多个容器服务多个群组的话一直不间断的polling对服务器的资源损耗有点严重。采用webhook应该能缓解一下这个问题。

初步构想

updater.start_webhook(listen='0.0.0.0',
                      port=8443,
                      url_path='TOKEN',
                      webhook_url='https://example.com:8443/TOKEN')
  • 增加相应的webhook变量:hook_port url_path hook_url 来指定webhook的参数
  • 在容器外自行使用相关的反向代理服务或相关docker容器为其使用反向代理(TG只接受来自443 8443等几个有限端口)
    反向代理这里推荐使用Caddy Docker,他有内置的自签名证书选项,也就不用配置证书相关的了

一个机器人只能服务一个群组

这个问题的出现是因为采用at形式的inline mode无法获取请求来源(群组、私聊等),只能获取请求的用户,所以在无法确定复读哪个群组的消息(也会存在一个人加了群组的问题,所以不能通过用户区分)。

多个容器

确实存在过度消耗资源的问题,并且在我上一个提交版本,恢复了导入历史记录功能后,开多个容器会出现端口占用😢(为方便使用系统代理,目前用的host模式)。

WebHook

没做成容器之前是有webhook的,主要是考虑到这个配置有点麻烦(又要设置路径又要反代),对普通人是比较困难的,就去掉了。

加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。

#10
提了一个关于webhook的pr,我自己在vps上测试了一下是可以使用的(指响应了/start)

加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。

是否可以在start的时候给群组加一个别名,例如 /start a,以后搜索的时候艾特机器人并输入别名再开始搜索呢。
不过这个时候鉴权的重要性可能也会提高了。#11

加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。

是否可以在start的时候给群组加一个别名,例如 /start a,以后搜索的时候艾特机器人并输入别名再开始搜索呢。 不过这个时候鉴权的重要性可能也会提高了。#11

最新的合并提交已经支持多群组。

  1. 在查询的时候会显示当前用户已加入的所有群组中已记录的信息(会显示消息来自哪个群组 )。
  2. 加入stop和delete的功能,用于开关当前群组的记录功能和删除当前群组已记录的消息。

加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。

是否可以在start的时候给群组加一个别名,例如 /start a,以后搜索的时候艾特机器人并输入别名再开始搜索呢。 不过这个时候鉴权的重要性可能也会提高了。#11

最新的合并提交已经支持多群组。

1. 在查询的时候会显示当前用户已加入的所有群组中已记录的信息(会显示消息来自哪个群组 )。

2. 加入stop和delete的功能,用于开关当前群组的记录功能和删除当前群组已记录的消息。

多群组消息入库好像有点问题,message id 在数据库里是unique id,但是每个群都是单独记录message id的,所以会产生冲突..

[SQL: INSERT INTO message (id, link, type, category, text, video, photo, audio, voice, date, from_id, from_chat) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (186, 'https://t.me/xxxxx/186', 'text', '', '单独', '', '', '', '', '2022-06-15 02:51:12.000000', 000000, -10000000000)]
(Background on this error at: http://sqlalche.me/e/gkpj)```

加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。

是否可以在start的时候给群组加一个别名,例如 /start a,以后搜索的时候艾特机器人并输入别名再开始搜索呢。 不过这个时候鉴权的重要性可能也会提高了。#11

最新的合并提交已经支持多群组。

1. 在查询的时候会显示当前用户已加入的所有群组中已记录的信息(会显示消息来自哪个群组 )。

2. 加入stop和delete的功能,用于开关当前群组的记录功能和删除当前群组已记录的消息。

多群组消息入库好像有点问题,message id 在数据库里是unique id,但是每个群都是单独记录message id的,所以会产生冲突..

[SQL: INSERT INTO message (id, link, type, category, text, video, photo, audio, voice, date, from_id, from_chat) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (186, 'https://t.me/xxxxx/186', 'text', '', '单独', '', '', '', '', '2022-06-15 02:51:12.000000', 000000, -10000000000)]
(Background on this error at: http://sqlalche.me/e/gkpj)```

确实存在这个问题...

修复消息id重复问题9965223