telegram-search-bot
telegram-search-bot copied to clipboard
有无考虑过支持webhook模式
目前机器人使用的是polling模式,考虑到一个机器人只能服务一个群组,如果开启很多个容器服务多个群组的话一直不间断的polling对服务器的资源损耗有点严重。采用webhook应该能缓解一下这个问题。
初步构想
- 给容器增加环境变量
bot_mod
,默认为poll,如指定为webhook则使用webhook模式: https://github.com/python-telegram-bot/python-telegram-bot/wiki/Webhooks
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的,主要是考虑到这个配置有点麻烦(又要设置路径又要反代),对普通人是比较困难的,就去掉了。
加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。
https://github.com/Taosky/telegram-search-bot/pull/10 提了一个关于webhook的pr,我自己在vps上测试了一下是可以使用的(指响应了/start)
加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。
是否可以在start的时候给群组加一个别名,例如 /start a
,以后搜索的时候艾特机器人并输入别名再开始搜索呢。
不过这个时候鉴权的重要性可能也会提高了。https://github.com/Taosky/telegram-search-bot/issues/11
加入变量确实是个解决办法,但还是比较繁琐,可以先加上去看看。要彻底解决还是得想想办法解决一个机器人对应多个群组的问题。
是否可以在start的时候给群组加一个别名,例如
/start a
,以后搜索的时候艾特机器人并输入别名再开始搜索呢。 不过这个时候鉴权的重要性可能也会提高了。#11
最新的合并提交已经支持多群组。
- 在查询的时候会显示当前用户已加入的所有群组中已记录的信息(会显示消息来自哪个群组 )。
- 加入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重复问题https://github.com/Taosky/telegram-search-bot/commit/9965223bebe680fd3fe3f8e1a2d2bcd589852d04