Taosky/telegram-search-bot

根據流程無法執行…

themikesam opened this issue · 12 comments

請問config.py中的group id是指?

目前一个机器人只能在一个群组使用,这个Group ID是存储聊天记录的群组ID,项目运行后,添加机器人到群组,通过/chatid可以获取。然后填入config.py,再重新运行机器人。

@Taosky 感谢你的回覆,
/chatid 无法使用
image

@themikesam 程序执行正常吗?有没有报错?

@themikesam 程序执行正常吗?有没有报错?

2019-07-07 17:15:11,769 - telegram.ext.dispatcher - DEBUG - Setting singleton dispatcher as <telegram.ext.dispatcher.Dispatcher object at 0x7f782ace99b0>
2019-07-07 17:15:11,769 - JobQueue - DEBUG - Putting job time_monitor with t=1562490971.769931
2019-07-07 17:15:11,770 - JobQueue - DEBUG - JobQueue thread started
2019-07-07 17:15:11,770 - telegram.ext.updater - DEBUG - dispatcher - started
2019-07-07 17:15:11,771 - telegram.ext.updater - DEBUG - updater - started
2019-07-07 17:15:11,771 - telegram.ext.updater - DEBUG - Updater thread started (polling)
2019-07-07 17:15:11,771 - telegram.ext.updater - DEBUG - Start network loop retry bootstrap del webhook
2019-07-07 17:15:11,772 - telegram.bot - DEBUG - Entering: delete_webhook
2019-07-07 17:15:11,772 - telegram.vendor.ptb_urllib3.urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): api.telegram.org
2019-07-07 17:15:11,776 - telegram.ext.dispatcher - DEBUG - Dispatcher started
2019-07-07 17:15:12,941 - telegram.vendor.ptb_urllib3.urllib3.connectionpool - DEBUG - https://api.telegram.org:443 "POST /bot817727229:AGGstyDSAKpekL_bx2-8GXf93S2-x9f3WHQ/deleteWebhook HTTP/1.1" 401 58
2019-07-07 17:15:12,942 - telegram.ext.updater - ERROR - Error while bootstrap del webhook: Unauthorized
2019-07-07 17:15:12,942 - telegram.ext.updater - ERROR - Failed bootstrap phase after 0 retries (Unauthorized)
2019-07-07 17:15:12,942 - telegram.ext.updater - ERROR - unhandled exception in updater
Traceback (most recent call last):
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 156, in _thread_wrapper
    target(*args, **kwargs)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 273, in _start_polling
    self._bootstrap(bootstrap_retries, clean=clean, webhook_url='', allowed_updates=None)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 440, in _bootstrap
    'bootstrap del webhook', bootstrap_interval)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 333, in _network_loop_retry
    onerr_cb(te)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 432, in bootstrap_onerr_cb
    raise exc
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 319, in _network_loop_retry
    if not action_cb():
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 410, in bootstrap_del_webhook
    self.bot.delete_webhook()
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/bot.py", line 65, in decorator
    result = func(self, *args, **kwargs)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/bot.py", line 2097, in delete_webhook
    result = self._request.post(url, data, timeout=timeout)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 309, in post
    headers={'Content-Type': 'application/json'})
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 221, in _request_wrapper
    raise Unauthorized(message)
telegram.error.Unauthorized: Unauthorized
Exception in thread updater:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 156, in _thread_wrapper
    target(*args, **kwargs)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 273, in _start_polling
    self._bootstrap(bootstrap_retries, clean=clean, webhook_url='', allowed_updates=None)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 440, in _bootstrap
    'bootstrap del webhook', bootstrap_interval)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 333, in _network_loop_retry
    onerr_cb(te)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 432, in bootstrap_onerr_cb
    raise exc
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 319, in _network_loop_retry
    if not action_cb():
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/ext/updater.py", line 410, in bootstrap_del_webhook
    self.bot.delete_webhook()
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/bot.py", line 65, in decorator
    result = func(self, *args, **kwargs)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/bot.py", line 2097, in delete_webhook
    result = self._request.post(url, data, timeout=timeout)
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 309, in post
    headers={'Content-Type': 'application/json'})
  File "/home/{username}/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 221, in _request_wrapper
    raise Unauthorized(message)
telegram.error.Unauthorized: Unauthorized

2019-07-07 17:15:13,777 - telegram.ext.dispatcher - CRITICAL - stopping due to exception in another thread
2019-07-07 17:15:13,777 - telegram.ext.dispatcher - DEBUG - Dispatcher thread stopped
2019-07-07 17:15:13,777 - telegram.ext.updater - DEBUG - dispatcher - ended

以上是python3 robot.py的执行结果

Unauthorized应该是bot被移除屏蔽之类的,我新建了bot试了一下没有问题,可以获取,会不会是token错了。

Unauthorized应该是bot被移除屏蔽之类的,我新建了bot试了一下没有问题,可以获取,会不会是token错了。

看来是的,我之前是用手动输入的方法,现在用复制贴上没问题了。
但是请问这个bot,是只能在加入该群组後,才开始搜寻对吗?

假设我在2019年7月7日18:11:16加入这个bot
2019年7月7日18:11:16 之前的内容是不是都无法搜寻?

@themikesam 对的,只有加入后的消息,官方的API似乎只能获取最近的消息。

@themikesam 对的,只有加入后的消息,官方的API似乎只能获取最近的消息。

好的,感谢你的回覆

再问一个…

请问我今天同时加入了两个群组,

群组A 2019年7月7日 加入

群组B 2019年7月8日 加入

在7月8日绑定在群组B的id,
到2019年7月10日我再设GROUP ID成群组A的时候,
是从重新加入的那天(7月7日)开始可以搜寻,还是绑定GROUP ID(7月10日)开始搜寻?

@themikesam bot是监听所有的消息,然后判断是否为需要的群组的消息进行存储,所以每条消息只触发一次。
在7月8日-7月9日群组A、B的消息都触发了bot,但是只有B的消息存储了,所以在10号开始设定为群组A,也不会有8、9号的群组A的消息,B的消息其实也还在的,所以不推荐修改。如果要用于多个群组的话,可以运行多个bot实现。

关于不能存储多个群组的消息,是因为使用了Inline Mode(就是@搜索功能),这个模式bot只能获取用户的ID,无法获取群组ID,所以无法判断是在哪个群组执行的搜索,会造成搜索的混乱,因此只能手动设定一个群组。

@themikesam bot是监听所有的消息,然后判断是否为需要的群组的消息进行存储,所以每条消息只触发一次。
在7月8日-7月9日群组A、B的消息都触发了bot,但是只有B的消息存储了,所以在10号开始设定为群组A,也不会有8、9号的群组A的消息,B的消息其实也还在的,所以不推荐修改。如果要用于多个群组的话,可以运行多个bot实现。

关于不能存储多个群组的消息,是因为使用了Inline Mode(就是@搜索功能),这个模式bot只能获取用户的ID,无法获取群组ID,所以无法判断是在哪个群组执行的搜索,会造成搜索的混乱,因此只能手动设定一个群组。

那要达到中文搜寻的功能,使用你这个bot是可以达到,但是只限定1个bot1个群组。

假设要多个群组,就必须要多个bot,
而伺服器的占用资源也会相对的多…

依你这么叙述的话,bot必须一直在运行才有效果,而不是属于我要搜寻时再开启。

而且一个bot占用的资源可能在1~3% cpu…
我再想想或找找看还有没有更好的方法

这问题解决了,谢谢你

@themikesam 嗯,对的。做这个初衷就是突然想不起来谁说过一句什么话,然后用这个bot就可以“复读”了,也可以用来推送消息。

tg-search这个项目可以用于中日韩聊天记录的搜索,可以看一下,是通过官方客户端导出记录到本地进行搜索的,可能更符合你的需求。

@themikesam 嗯,对的。做这个初衷就是突然想不起来谁说过一句什么话,然后用这个bot就可以“复读”了,也可以用来推送消息。

tg-search这个项目可以用于中日韩聊天记录的搜索,可以看一下,是通过官方客户端导出记录到本地进行搜索的,可能更符合你的需求。

有看过这个了,这个需要导出历史记录。
而你的专案无需。

之前一直期待telegram官方能处理这个问题,可是用了那么久,也不见得他们想处理这个问题。
或许他们开发人员中没人使用中文,所以没遇到这个问题。

感谢你的回覆 :D