Initial commit
This commit is contained in:
commit
2060d2b4b5
4 changed files with 83 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
venv/
|
||||
__pycache__/
|
||||
.idea/
|
||||
.mypy_cache/
|
0
README.md
Normal file
0
README.md
Normal file
73
mattermost_bot.py
Executable file
73
mattermost_bot.py
Executable file
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import datetime
|
||||
from time import sleep
|
||||
import requests
|
||||
import astral
|
||||
from astral.sun import sun
|
||||
|
||||
CHANNEL = os.environ["SUNBOT_ANNOUNCE_CHANNEL"]
|
||||
AUTHORIZATION = "Bearer " + os.environ["SUNBOT_ANNOUNCE_MATTERMOST_TOKEN"]
|
||||
URL = os.environ["SUNBOT_ANNOUNCE_MATTERMOST_API_ENDPOINT"] + "/posts"
|
||||
|
||||
GHENT = astral.LocationInfo("Gent", "Belgium", "Europe/Brussels", 51.05, 3.72)
|
||||
|
||||
def post(message):
|
||||
payload = {
|
||||
"channel_id": CHANNEL,
|
||||
"message": message
|
||||
}
|
||||
print("Posting " + str(payload), flush=True)
|
||||
requests.post(URL, json=payload, headers={"Authorization": AUTHORIZATION})
|
||||
|
||||
|
||||
def format_in(diff):
|
||||
total_minutes = round(diff.total_seconds() / 60)
|
||||
hours, minutes = divmod(total_minutes, 60)
|
||||
return "{}h{}".format(hours, minutes)
|
||||
|
||||
|
||||
def wait_until(t, now):
|
||||
seconds = (t - now).total_seconds()
|
||||
print("Waiting {} seconds until {}".format(seconds, t), flush=True)
|
||||
sleep(seconds)
|
||||
|
||||
|
||||
def announce_sunrise(today):
|
||||
print("Announcing sunrise", flush=True)
|
||||
now = datetime.datetime.now(GHENT.tzinfo)
|
||||
post(":sunrise: De zon komt op in Gent!\nZonnemiddag om {} (binnen {})\nZonsondergang om {} (binnen {})".format(
|
||||
tomorrow["noon"],
|
||||
format_in(now - tomorrow["noon"]),
|
||||
tomorrow["sunset"],
|
||||
format_in(now - tomorrow["sunset"]),
|
||||
))
|
||||
|
||||
def announce_sunset(tomorrow):
|
||||
print("Announcing sunset", flush=True)
|
||||
now = datetime.datetime.now(GHENT.tzinfo)
|
||||
post(":sunset: De zon gaat onder in Gent!\nZonsopkomst om {} (binnen {})".format(
|
||||
tomorrow["sunrise"],
|
||||
format_in(now - tomorrow["sunrise"]),
|
||||
))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Starting Sunbot", flush=True)
|
||||
while True:
|
||||
today = sun(GHENT.observer, date=datetime.date.today())
|
||||
tomorrow = sun(GHENT.observer, date=datetime.date.today() + datetime.timedelta(days=1))
|
||||
now = datetime.datetime.now(GHENT.tzinfo)
|
||||
|
||||
if now >= today["sunset"]:
|
||||
wait_until(tomorrow["sunrise"], now)
|
||||
announce_sunrise(tomorrow)
|
||||
|
||||
elif now >= today["sunrise"]:
|
||||
wait_until(today["sunset"], now)
|
||||
announce_sunset(tomorrow)
|
||||
|
||||
else:
|
||||
wait_until(today["sunrise"], now)
|
||||
announce_sunrise(today)
|
6
requirements.txt
Normal file
6
requirements.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
astral==2.2
|
||||
certifi==2020.12.5
|
||||
chardet==4.0.0
|
||||
idna==2.10
|
||||
requests==2.25.1
|
||||
urllib3==1.26.3
|
Loading…
Reference in a new issue