refactoring
parent
bac8b398bb
commit
6f9da6f761
46
bot.py
46
bot.py
|
|
@ -8,6 +8,10 @@ import logging
|
|||
import requests
|
||||
import schedule
|
||||
|
||||
STATUS_URL = "https://isfswiaiopen.wiai.de?json"
|
||||
MESSAGE_URL = "https://api.telegram.org/bot{token}/sendMessage"
|
||||
IMAGE_URL = "https://api.telegram.org/bot{token}/sendPhoto"
|
||||
|
||||
logging.basicConfig(format='%(asctime)s %(levelname)s %(name)s:%(message)s', level=logging.DEBUG, datefmt="%Y.%m.%d %H:%M:%S")
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -15,7 +19,7 @@ def parse_time(string):
|
|||
return datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
def get_status():
|
||||
status = requests.get("https://isfswiaiopen.wiai.de?json").json()
|
||||
status = requests.get(STATUS_URL).json()
|
||||
status["timestamp"] = parse_time(status['timestamp'])
|
||||
return status
|
||||
|
||||
|
|
@ -23,21 +27,31 @@ def get_status_text(config, src=get_status):
|
|||
return config["texts"][str(get_status()["doorstate"])]
|
||||
|
||||
def post(chats, text, token):
|
||||
url = "https://api.telegram.org/bot{token}/sendMessage".format(token=token)
|
||||
url = MESSAGE_URL.format(token=token)
|
||||
for chat in chats:
|
||||
response = requests.post(url, data={'chat_id': chats[chat], "text": text})
|
||||
log.info("post message: %s", response.status_code)
|
||||
|
||||
def has_argument(args, key):
|
||||
return key in args and args[key]
|
||||
|
||||
def get_config(args):
|
||||
config = json.load(open(args['config']))
|
||||
if has_argument(args, "interval"):
|
||||
log.info("Overwrite sleep value by argument…")
|
||||
config["sleep"] = args["interval"]
|
||||
return config
|
||||
|
||||
def main(args={"config": "settings.json"}):
|
||||
log.info("run once")
|
||||
config = json.load(open(args['config']))
|
||||
config = get_config(args)
|
||||
text = get_status_text(config)
|
||||
post(config['groups'], text, config['token'])
|
||||
post_plot(config)
|
||||
|
||||
def loop(args={"config": "settings.json"}):
|
||||
log.info("prepare loop")
|
||||
config = json.load(open(args['config']))
|
||||
config = get_config(args)
|
||||
setup(config)
|
||||
while True:
|
||||
try:
|
||||
|
|
@ -50,25 +64,32 @@ def do_loop(config):
|
|||
last_state = None
|
||||
while True:
|
||||
log.info("enter loop")
|
||||
changed = has_changed(last_state)
|
||||
if changed:
|
||||
last_state = update(new_state)
|
||||
log.info("run pending tasks")
|
||||
schedule.run_pending()
|
||||
log.info("sleep")
|
||||
time.sleep(config['sleep'])
|
||||
|
||||
def has_changed(last_state):
|
||||
changed = False
|
||||
new_state = get_status()
|
||||
if last_state is None:
|
||||
changed = True
|
||||
elif not last_state["doorstate"] == new_state["doorstate"]:
|
||||
changed = True
|
||||
if changed:
|
||||
last_state = new_state
|
||||
text = get_status_text(config, lambda: last_state)
|
||||
return changed
|
||||
|
||||
def update(state):
|
||||
text = get_status_text(config, lambda: state)
|
||||
post(config["groups"], text, config["token"])
|
||||
log.info("run pending tasks")
|
||||
schedule.run_pending()
|
||||
log.info("sleep")
|
||||
time.sleep(config['sleep'])
|
||||
return state
|
||||
|
||||
def post_plot(config):
|
||||
from plot import get_plot
|
||||
with NamedTemporaryFile() as target:
|
||||
image_url = 'https://api.telegram.org/bot{token}/sendPhoto'.format(token=config['token'])
|
||||
image_url = IMAGE_URL.format(token=config['token'])
|
||||
photo, last = get_plot(target)
|
||||
files = {'photo': photo}
|
||||
if last + datetime.timedelta(days=1) < datetime.datetime.today():
|
||||
|
|
@ -87,6 +108,7 @@ if __name__ == "__main__":
|
|||
parser = argparse.ArgumentParser(description="DoorStateBot")
|
||||
parser.add_argument("--config", "-c", default="settings.json", help="Configuration file")
|
||||
parser.add_argument("--loop", "-l", action="store_true", help="Loop")
|
||||
parser.add_argument("--interval", "-i", help="Interval")
|
||||
args = parser.parse_args()
|
||||
if args.loop:
|
||||
loop(vars(args))
|
||||
|
|
|
|||
Loading…
Reference in New Issue