我在Python上的电报机器人无法工作

时间:2017-12-16 21:28:55

标签: python azure telegram-bot systemd

我用Python写了一个机器人。 它会定期停止工作。 虚拟机运行稳定。 正在运行的服务始终处于活动状态。

我正在使用此库 - https://github.com/eternnoir/pyTelegramBotAPI

在Azure服务(Ubuntu 16.04.5)上的虚拟机上运行。

这是Python脚本代码:

# -*- coding: utf-8 -*-
import re
import config
import telebot

bomg = "Бомж"
regRusLetters = re.compile("^[а-яА-Яё]+$")

bot = telebot.TeleBot(config.token)


def second_vowels(text):
    pos = 0
    i = 1
    while i < len(text):
        if text[i] in "ауоыиэяюёе":
            pos = i
            break
        i = i + 1
    return pos


@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, "Пришли мне слово на Русском и я его бомжирую!")


@bot.message_handler(content_types=["text"])
def repeat_all_mesages(message):
    response = "не могу бомжировать..."
    text = message.text.lower()
    if re.match(regRusLetters, text):
        pos = second_vowels(text)
        response = bomg + text[pos:]

    bot.send_message(message.chat.id, response)


bot.polling(none_stop=True)

使用systemd配置为服务。这是bot.service文件:

[Unit]
Description=TelegramBot
After=network.target

[Service]
Type=idle
ExecStart=/usr/bin/python3.5 /home/rhanza/TelegramBot/bot.py
Restart=always

[Install]
WantedBy=multi-user.target

当我通过ssl连接并检查进程的状态时,我看到以下内容:

status bot.service
● bot.service - TelegramBot
   Loaded: loaded (/etc/systemd/system/bot.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-12-16 21:06:31 UTC; 3min 8s ago
 Main PID: 3823 (python3.5)
    Tasks: 4
   Memory: 19.2M
      CPU: 930ms
   CGroup: /system.slice/bot.service
           └─3823 /usr/bin/python3.5 /home/rhanza/TelegramBot/bot.py &

Dec 16 21:06:31 botholder1 systemd[1]: bot.service: Service hold-off time over, scheduling restart.
Dec 16 21:06:31 botholder1 systemd[1]: Stopped TelegramBot.
Dec 16 21:06:31 botholder1 systemd[1]: Started TelegramBot.

虽然服务稳定,但机器人并不总是响应消息。 我无法弄清楚原因是什么以及如何解决问题。 也许有人可以说出答案?

2 个答案:

答案 0 :(得分:0)

电报服务器会在长时间播放时定期向您发送504(网关超时)错误。

使用webhook,而不是长时间播放。

答案 1 :(得分:0)

尝试为长轮询增加timeout

bot.polling(none_stop=True, timeout=300)

如果这没有帮助,您可以使用

systemd期刊获取python错误追溯
sudo journalctl -u bot.service

并将其添加到您的问题中。