我刚刚开始在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一起使用。
感谢。
答案 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}}