首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Telepot - Telegram机器人每10分钟发送一次消息

Telepot - Telegram机器人每10分钟发送一次消息
EN

Stack Overflow用户
提问于 2018-05-22 21:14:21
回答 2查看 3.5K关注 0票数 0

我需要我的机器人来监控我的树莓cpu温度。它每分钟检查一次,然后如果>阈值,则发送警报。当一条消息被发送时,我需要它在10分钟内不再发送。我已经这样做了,但是在10分钟后发送相同的消息时,我得到了一个超时错误。有人能帮我吗?我在telepot giyhub页面上找不到任何帮助。

这是我的代码

代码语言:javascript
复制
bot = telepot.Bot(TOKEN)
bot.message_loop(handle)

while 1:
  if ((get_cpu_temperature() > 30.0) and alarm()):
        data = "Temperature: " + str(get_cpu_temperature()) + " 'C"
        bot.sendMessage(users[0],data)
  time.sleep(60)

报警功能只检查是否经过了10分钟。

这是错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "temp_disk_check_live.py", line 74, in <module>
    bot.sendMessage(users[0],data)
  File "/usr/local/lib/python2.7/dist-packages/telepot/__init__.py", line 456, in sendMessage
    return self._api_request('sendMessage', _rectify(p))
  File "/usr/local/lib/python2.7/dist-packages/telepot/__init__.py", line 434, in _api_request
    return api.request((self._token, method, params, files), **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/telepot/api.py", line 130, in request
    r = fn(*args, **kwargs)  # `fn` must be thread-safe
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/request.py", line 148, in request_encode_body
    return self.urlopen(method, url, **extra_kw)
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/poolmanager.py", line 321, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/connectionpool.py", line 639, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/util/retry.py", line 357, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/connectionpool.py", line 601, in urlopen
    chunked=chunked)
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/connectionpool.py", line 389, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/home/pi/.local/lib/python2.7/site-packages/urllib3/connectionpool.py", line 320, in _raise_timeout
    raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=30)
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
  File "/usr/local/lib/python2.7/dist-packages/telepot/__init__.py", line 391, in run
  File "/usr/local/lib/python2.7/dist-packages/telepot/__init__.py", line 310, in k
  File "/usr/lib/python2.7/threading.py", line 168, in acquire
<type 'exceptions.TypeError'>: 'NoneType' object is not callable

handle函数是来自telepot示例的标准函数。

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2018-05-22 21:26:16

您可以创建一个新线程并启动一个计时器,如下所示。

代码语言:javascript
复制
def hello():
    print("hello, world")

t = Timer(30.0, hello)
t.start()  # after 30 seconds, "hello, world" will be printed

所以在你的代码中;

代码语言:javascript
复制
def send_message(user,message):
    bot.sendMessage(user,message)

t = Timer(600, send_message("Temperature...", user[0])
if cpu_temp > 30: t.start()
票数 0
EN

Stack Overflow用户

发布于 2019-05-10 16:52:31

当你真的需要发送消息的时候,初始化Bot怎么样?

代码语言:javascript
复制
while 1:
  if ((get_cpu_temperature() > 30.0) and alarm()):
        data = "Temperature: " + str(get_cpu_temperature()) + " 'C"
        telepot.Bot(TOKEN).sendMessage(users[0],data)
  time.sleep(60*10) # 10 min
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50468678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档