From a33a8fbc55cfcc8dc0d2a421aaecfc5da1b2d9b8 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Fri, 30 Dec 2016 23:18:52 +0200 Subject: [PATCH] First commit --- main.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 8 ++++ 2 files changed, 111 insertions(+) create mode 100644 main.py create mode 100644 requirements.txt diff --git a/main.py b/main.py new file mode 100644 index 0000000..50463bf --- /dev/null +++ b/main.py @@ -0,0 +1,103 @@ +import os +import sys +import json +import time +import telepot +import requests +import traceback +from pathlib import Path +import pprint + +try: + API_TOKEN = os.environ["TELEGRAM_API_TOKEN"] +except KeyError: + print("TELEGRAM_API_TOKEN enviroment variable is not set.") + exit(1) + +CONFIG_FILE = os.environ.get("CONFIG_FILE", "./arti_server_bot.json") +config_file = Path(CONFIG_FILE) + +users = {} +package_history = {} +if config_file.exists(): + conf = {} + try: + conf = json.loads(config_file.open().read()) + except json.decoder.JSONDecodeError as err: + traceback.print_exc() + print("Loading config file failed") + + users = conf.get("users", {}) + + +def write_config(): + with config_file.open("w") as f: + conf = {"users": users} + f.write(json.dumps(conf, indent=4)) + +TRACKING_URL = "https://gls-group.eu/app/service/open/rest/EU/en/rstt001?match=" +STEAM_CONTROLLER_TRACKING_ID = "52650089530801" + +bot = telepot.Bot(API_TOKEN) + + +def on_message(msg): + content_type, chat_type, chat_id = telepot.glance(msg) + chat_id = str(chat_id) + print(content_type, chat_type, chat_id, msg["from"]["username"], msg["text"]) + if content_type == "text" and chat_type == "private": + if msg["text"] == "/start": + if msg["from"]["username"] == "artizirk": + bot.sendMessage(chat_id, "Hello master") + if chat_id not in users: + bot.sendMessage(chat_id, "Saving you") + users[chat_id] = msg["from"] + write_config() + else: + bot.sendMessage(chat_id, "Your chat_id already saved") + else: + bot.sendMessage(chat_id, + "Hello {}".format(msg["from"]["first_name"])) + elif msg["text"] == "/users": + reply = "Current users are:```{}```" + pretty_users = pprint.pformat(users, indent=4) + bot.sendMessage(chat_id, reply.format(pretty_users), + parse_mode="Markdown") + else: + bot.sendMessage(chat_id, "No idea what you just said") + else: + reply = "I'm sorry {}, I'm afraid I cant't do that." + name = msg["from"].get("first_name") + if not name: + name = msg["from"].get("username", "Dave") + bot.sendMessage(chat_id, reply.format(name)) + +bot.message_loop(on_message) +print("Listening ...") + + +def parse_delivery_history(resp): + history = resp["tuStatus"][0]["history"] + for event in history: + event["datetime"] = event["date"] + " " + event["time"] + del event["date"] + del event["time"] + yield event + +msg_template = "Steam controller status update from:\n`{} ({}) at {}`\n{}" +while True: + resp = requests.get(TRACKING_URL+STEAM_CONTROLLER_TRACKING_ID) + history = list(parse_delivery_history(resp.json()))[::-1] + + for event in history: + if event["datetime"] not in package_history: + package_history[event["datetime"]] = event + msg = msg_template.format( + event["address"]["countryName"], + event["address"]["city"], + event["datetime"], + event["evtDscr"] + ) + for user in users: + bot.sendMessage(user, msg, parse_mode="Markdown") + time.sleep(60) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9a7eb93 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +aiohttp==1.2.0 +async-timeout==1.1.0 +chardet==2.3.0 +multidict==2.1.4 +requests==2.12.4 +telepot==10.4 +urllib3==1.19.1 +yarl==0.8.1