Я установил 3 скрипта Python для бота телеграммы.
Один - это библиотека, которая определяет используемые методы:
import requests
import json
import configparser as cfg
class telegram_chatbot():
def __init__(self, config):
self.token = self.read_token_from_config_file(config)
self.base = "https://api.telegram.org/bot{}/".format(self.token)
def get_updates(self, offset=None):
url = self.base + "getUpdates?timeout=100"
if offset:
url = url + "&offset={}".format(offset + 1)
r = requests.get(url)
return json.loads(r.content)
def send_message(self, msg, chat_id):
url = self.base + "sendMessage?chat_id={}&text={}".format(chat_id, msg)
if msg is not None:
requests.get(url)
def read_token_from_config_file(self, config):
parser = cfg.ConfigParser()
parser.read(config)
return parser.get('creds', 'token')
Второй слушает ввод пользователя и затем отвечает на сообщение:
from bot import telegram_chatbot
import csv
bot = telegram_chatbot("config.cfg")
print("bot started...")
def make_reply(msg):
reply = ""
if msg is not None and msg == "/naechsteaufgabe":
string = ", "
with open("Marketing-Plan.csv", "r") as csvfile:
reader = csv.reader(csvfile, delimiter = ";")
next(reader)
for row in reader:
if row[6] != "erledigt":
string = string.join(row)
reply = string
return reply
elif msg is not None and msg == "/hilfe":
reply = "text"
return reply
if msg is not None and msg == "/aufgaben":
with open("Marketing-Plan.csv", "r") as csvfile:
reader = csv.reader(csvfile, delimiter = ";")
next(reader)
list = [x for x in reader if x[6] == "mussnoch"]
string = ""
for entry in list:
string = string + " ".join(entry) + "\n"
reply = string
if reply == "" or reply == None:
reply = "Error"
return reply
return reply
update_id = None
while True:
updates = bot.get_updates(offset=update_id)
updates = updates["result"]
if updates:
for item in updates:
update_id = item["update_id"]
try:
message = str(item["message"]["text"])
except:
message = None
from_ = item["message"]["chat"]["id"]
reply = make_reply(message)
bot.send_message(reply, from_)
и третий скрипт должен создавать сообщение и отправлять его в группе каждые 24 часа:
import time
from bot import telegram_chatbot
import csv
bot = telegram_chatbot("config.cfg")
starttime=time.time()
def make_reminder():
with open("Marketing-Plan.csv", "r") as csvfile:
string = ", "
reader = csv.reader(csvfile, delimiter = ";")
next(reader)
for row in reader:
if row[6] != "erledigt":
string = string.join(row)
return string
while True:
bot.send_message(make_reminder(), "somechatid")
print("tick")
time.sleep(86400.0 - ((time.time() - starttime) % 86400.0))
Эти скрипты запускаются на моем веб-сервере Ubuntu 16.04, но через некоторое время (~ 24h) скрипты, похоже, останавливаются, потому что бот больше не отвечает на ввод пользователя.
Как и почему это происходит?Как я могу изменить это, чтобы бот работал 24/7?