2017-07-31 305 views
1

在我的脚本中,我想获取电报机器人所有者的位置,当用户点击按钮时,机器人将所有者的位置以Google地图图像的形式发送给用户。 我的脚本是:获取电报机器人所有者的位置

import telepot 
from telepot.loop import MessageLoop 
import time 
from gps3 import gps3 

bot = telepot.Bot('mytoken') 
def handle(msg): 
    content_type, chat_type, chat_id = telepot.glance(msg) 
    gps_socket = gps3.GPSDSocket() 
    data_stream = gps3.DataStream() 
    gps_socket.connect() 
    gps_socket.watch() 
    for new_data in gps_socket: 
     if new_data: 
      data_stream.unpack(new_data) 
      alt = data_stream.TPV['alt'] 
      lat = data_stream.TPV['lat'] 
    bot.sendMessage(chat_id , alt) 



MessageLoop(bot, handle).run_as_thread() 
while 1: 
    time.sleep(1) 

我在我的笔记本上运行此脚本,因为我的笔记本电脑有没有GPS,我得到的错误,当我用我的Android手机上运行它,它应该工作,但我得到了同样的错误

+0

你是什么意思的所有者BOT? –

+0

请问机器人老板。 – samira

+0

你如何期待你的android运行一个python脚本? –

回答

1

我无法完全测试这一点,但如果笔记本电脑缺少GPS是您唯一的问题,那么如果您在测试时只是用这样的代码替换大部分代码会发生什么? :

import telepot 
from telepot.loop import MessageLoop 
import time 

bot = telepot.Bot('mytoken') 
def handle(msg): 
    content_type, chat_type, chat_id = telepot.glance(msg) 
    lat = 53.540442 
    long = 9.996381 
    alt = 53.432   
    bot.sendMessage(chat_id , alt) 

MessageLoop(bot, handle).run_as_thread() 
while 1: 
    time.sleep(1) 

只要给它它想要的坐标并试着让脚本的电报部分工作。可能sendMessage想要的不仅仅是高度,尽管..

+0

我在笔记本上运行这个脚本,它工作正常,我没有得到任何错误,但它只是发送一个数字(alt = 53.432)发送任何位置或谷歌地图图像到电报机器人。 – samira

+0

当我用bot.sendlocation替换bot.sendmessage(chat_id,lat,long,alt)时,它发送一个位置给我的bot.in我的想法机器人所有者是可变的,它不是常量,所以我不能使用常量alt,long和纬度号 – samira

+0

这个想法只是为了帮助您在您的个人电脑上进行测试的同时删除GPS问题,以便您可以专注于“telepot”部分。如果你想让所有者变量,你不能只在顶部定义'bot1 = ..,bot2 = ..'并且在底部定义几个'MessageLoop'命令(在测试时)。如果它根本没有帮助,忘记upvote ..看看[这个](http://telepot.readthedocs.io/en/latest/reference.html#basic-bot)我甚至不确定你需要'处理'在那里。 – cardamom