Python Telegram机器人太慢了?

时间:2016-04-23 08:55:10

标签: python bots telegram telegram-bot

我刚刚开始在python中创建一个电报机器人,我注意到我用了一小段代码做了一件事:机器人需要很长时间才能响应。一旦我向我的机器人发送消息,得到回复需要将近6-8秒,这在现实情况下太长了。我确定这不是我的网络太慢了。机器人从我的笔记本电脑运行。这是我的代码:

from urllib.request import urlopen
import json
import time

token="xxxxxxx:9999999999999999999999999999999"
site="https://api.telegram.org/bot"+token
offset=110000001

while 1:
    time.sleep(0.1)
    content=(urlopen(site+"/getupdates?offset="+str(offset)).read()).decode('utf-8')
    info=json.loads(content)
    if(info['result']):
        incoming=info['result'][0]['message']['text']
        print(incoming)
        if(incoming=='Hi'):
            msg=(urlopen(site+"/sendmessage?chat_id=184044173&text=HI THERE").read()).decode('utf-8')
        offset=info['result'][0]['update_id']+1

导致此问题的原因是什么?如何解决?我想继续使用python制作机器人,我也想从头做一个,所以请不要告诉我使用现有的框架或切换语言。

我听说过'webhooks'很多,但从来没有真正理解它们。如果它与此问题的解决方案相关,请详细解释webhooks以及如何将它们与python一起使用。

感谢。

2 个答案:

答案 0 :(得分:1)

我试着为你解释一下Webhook:

Webhook是服务器上的脚本。你告诉电报,使用这个脚本发布任何消息。

在setwebhook之后,呼叫电报将通过POST将所有消息发送到您的脚本。 而你只需要处理收入到webhook的消息。

我在php上写了webhook,也许有一些PHP代码可以帮助你修改webhooks概念:

$update_json = file_get_contents('php://input');
$update = json_decode($update_json, true);
// get variable;
$chatId = $update["message"]["chat"]["id"];
$userId = $update["message"]["from"]["id"];
$message = $update["message"]["text"];

在第一行我读取所有数据(仅使用帖子发送消息的电报) 接下来我收到用户,chatId和userId的消息表单。

接下来,您可以使用它发送新消息

答案 1 :(得分:0)

您的代码存在的问题是timeout方法没有urlopen期。尝试设置from urllib.request import urlopen import json import time token="xxxxxxx:9999999999999999999999999999999" site="https://api.telegram.org/bot"+token offset=110000001 while 1: time.sleep(0.1) content=(urlopen(site+"/getupdates?timeout=10&offset="+str(offset)).read()).decode('utf-8') info=json.loads(content) if(info['result']): incoming=info['result'][0]['message']['text'] print(incoming) if(incoming=='Hi'): msg=(urlopen(site+"/sendmessage?chat_id=184044173&text=HI THERE").read()).decode('utf-8') offset=info['result'][0]['update_id']+1 10秒,以便{{1}}在发送另一个请求之前等待10秒以进行新的更新。

以下是经过编辑的代码。

{{1}}