Compare commits
No commits in common. "03e3ec912a0b98b80030e81dedd38aeda9b621c0" and "10cab2c24e8cb1a982edf4a92a8cceee692fb75b" have entirely different histories.
03e3ec912a
...
10cab2c24e
|
@ -1,12 +0,0 @@
|
||||||
# EditorConfig is awesome: https://EditorConfig.org
|
|
||||||
|
|
||||||
# top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
end_of_line = lf
|
|
||||||
charset = utf-8
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
insert_final_newline = false
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -26,5 +26,3 @@
|
||||||
/vendors/*
|
/vendors/*
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
__pycache__
|
|
||||||
*.secret
|
|
||||||
|
|
|
@ -1,42 +1,9 @@
|
||||||
steps:
|
pipeline:
|
||||||
build-bot:
|
docker-build:
|
||||||
|
secrets: [docker_username, docker_password]
|
||||||
image: woodpeckerci/plugin-docker-buildx
|
image: woodpeckerci/plugin-docker-buildx
|
||||||
settings:
|
settings:
|
||||||
username:
|
|
||||||
from_secret: docker_username
|
|
||||||
password:
|
|
||||||
from_secret: docker_password
|
|
||||||
context: bot
|
|
||||||
dockerfile: bot/Dockerfile
|
|
||||||
repo: dentaku/vollmond-bot
|
|
||||||
tags:
|
|
||||||
- latest
|
|
||||||
- v0.2
|
|
||||||
auto-tag: true
|
|
||||||
platforms: [linux/amd64, linux/arm64]
|
|
||||||
when:
|
|
||||||
- event: push
|
|
||||||
path:
|
|
||||||
include: [ 'bot/**' ]
|
|
||||||
- event: cron
|
|
||||||
- event: manual
|
|
||||||
|
|
||||||
build-webpage:
|
|
||||||
image: woodpeckerci/plugin-docker-buildx
|
|
||||||
settings:
|
|
||||||
username:
|
|
||||||
from_secret: docker_username
|
|
||||||
password:
|
|
||||||
from_secret: docker_password
|
|
||||||
repo: dentaku/vollmond
|
repo: dentaku/vollmond
|
||||||
tags:
|
tag: latest
|
||||||
- latest
|
|
||||||
- v1.1
|
|
||||||
auto-tag: true
|
auto-tag: true
|
||||||
platforms: [linux/amd64, linux/arm64]
|
platforms: [linux/amd64, linux/arm64]
|
||||||
when:
|
|
||||||
- event: push
|
|
||||||
path:
|
|
||||||
include: [ 'wwwroot/**', 'Dockerfile' ]
|
|
||||||
- event: cron
|
|
||||||
- event: manual
|
|
|
@ -1,2 +0,0 @@
|
||||||
*.secret
|
|
||||||
Dockerfile
|
|
|
@ -1,9 +0,0 @@
|
||||||
FROM python:3
|
|
||||||
WORKDIR /usr/src/app
|
|
||||||
|
|
||||||
COPY requirements.txt ./
|
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
CMD [ "python", "./bot.py" ]
|
|
23
bot/bot.py
23
bot/bot.py
|
@ -1,23 +0,0 @@
|
||||||
import os
|
|
||||||
import moon
|
|
||||||
from mastodon import Mastodon
|
|
||||||
from pytz import timezone
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# Set up Mastodon
|
|
||||||
mastodon = Mastodon(
|
|
||||||
access_token = 'token.secret',
|
|
||||||
api_base_url = os.getenv('MASTODON_URL', 'https://mastodon.wazongtest.de/')
|
|
||||||
)
|
|
||||||
|
|
||||||
tz = timezone('Europe/Berlin')
|
|
||||||
now = datetime.now().astimezone(tz)
|
|
||||||
moon_text="Aktuelle Mondphase:\n"
|
|
||||||
moon_text+=moon.moon_phase_as_text(now)
|
|
||||||
print(moon_text)
|
|
||||||
|
|
||||||
mastodon.status_post(moon_text, visibility='unlisted')
|
|
||||||
|
|
||||||
me = mastodon.me()
|
|
||||||
|
|
||||||
print(mastodon.account_statuses(me['id'])[0])
|
|
119
bot/moon.py
119
bot/moon.py
|
@ -1,119 +0,0 @@
|
||||||
import math
|
|
||||||
from pytz import timezone
|
|
||||||
from datetime import datetime
|
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
|
|
||||||
def next_full_moon(start):
|
|
||||||
|
|
||||||
# date of the known full moon
|
|
||||||
y2k = datetime(1999, 12, 22, 18, 31, 18).astimezone(
|
|
||||||
timezone('Europe/Berlin'))
|
|
||||||
since2000 = (start - y2k) / timedelta(days=365.25)
|
|
||||||
|
|
||||||
rads = 3.14159265359/180
|
|
||||||
phase = 0.5 # 0.5 equals full moon
|
|
||||||
# Anzahl der Mondphasen seit 2000
|
|
||||||
k = math.floor((since2000)*12.36853087)+phase
|
|
||||||
|
|
||||||
# Mittlerer JDE Wert des Ereignisses
|
|
||||||
JDE = 2451550.09766+29.530588861*k
|
|
||||||
# Relevante Winkelwerte in [Radiant]
|
|
||||||
M = (2.5534+29.10535670*k)*rads
|
|
||||||
Ms = (201.5643+385.81693528*k)*rads
|
|
||||||
F = (160.7108+390.67050284*k)*rads
|
|
||||||
|
|
||||||
# Korrekturterme JDE fuer Vollmond
|
|
||||||
JDE += -0.40614*math.sin(Ms)
|
|
||||||
JDE += 0.17302*math.sin(M)
|
|
||||||
JDE += 0.01614*math.sin(2*Ms)
|
|
||||||
JDE += 0.01043*math.sin(2*F)
|
|
||||||
JDE += 0.00734*math.sin(Ms-M)
|
|
||||||
JDE += -0.00515*math.sin(Ms+M)
|
|
||||||
JDE += 0.00209*math.sin(2*M)
|
|
||||||
JDE += -0.00111*math.sin(Ms-2*F)
|
|
||||||
|
|
||||||
# Konvertierung von Julianischem Datum auf Gregorianisches Datum
|
|
||||||
|
|
||||||
z = math.floor(JDE + 0.5)
|
|
||||||
f = (JDE + 0.5) - math.floor(JDE + 0.5)
|
|
||||||
if (z < 2299161):
|
|
||||||
a = z
|
|
||||||
else:
|
|
||||||
g = math.floor((z - 1867216.25) / 36524.25)
|
|
||||||
a = z + 1 + g - math.floor(g / 4)
|
|
||||||
b = a + 1524
|
|
||||||
c = math.floor((b - 122.1) / 365.25)
|
|
||||||
d = math.floor(365.25 * c)
|
|
||||||
e = math.floor((b - d) / 30.6001)
|
|
||||||
|
|
||||||
# //Tag incl. Tagesbruchteilen
|
|
||||||
tag_temp = b - d - math.floor(30.6001 * e) + f
|
|
||||||
stunde_temp = (tag_temp - math.floor(tag_temp)) * 24
|
|
||||||
minute_temp = (stunde_temp - math.floor(stunde_temp)) * 60
|
|
||||||
|
|
||||||
stunde = math.floor(stunde_temp)
|
|
||||||
minute = math.floor(minute_temp)
|
|
||||||
sekunde = round((minute_temp - math.floor(minute_temp)) * 60)
|
|
||||||
|
|
||||||
tag = math.floor(tag_temp)
|
|
||||||
|
|
||||||
if (e < 14):
|
|
||||||
monat = e - 1
|
|
||||||
else:
|
|
||||||
monat = e - 13
|
|
||||||
|
|
||||||
if (monat > 2):
|
|
||||||
jahr = c - 4716
|
|
||||||
else:
|
|
||||||
jahr = c - 4715
|
|
||||||
|
|
||||||
fmutc = datetime(jahr, monat, tag, stunde, minute,
|
|
||||||
sekunde, tzinfo=timezone('UTC'))
|
|
||||||
|
|
||||||
return fmutc.astimezone(start.tzinfo)
|
|
||||||
|
|
||||||
|
|
||||||
def is_full_moon(mday: datetime):
|
|
||||||
nmoon = next_full_moon(mday)
|
|
||||||
till_next_full = nmoon-mday
|
|
||||||
if (till_next_full < timedelta(days=1) or till_next_full < timedelta(days=28)):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def moon_phase_as_text(mday: datetime):
|
|
||||||
nmoon = next_full_moon(mday)
|
|
||||||
till_next_full = nmoon - mday
|
|
||||||
till_next_full_text = strfdelta(
|
|
||||||
till_next_full, "{days} Tage {hours} Stunden bis Vollmond")
|
|
||||||
if (till_next_full < timedelta(days=1)):
|
|
||||||
return ("🌕 Vollmond")
|
|
||||||
if (till_next_full < timedelta(days=6)):
|
|
||||||
return ("🌔 Zunehmender Dreiviertelmond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=10)):
|
|
||||||
return ("🌓 Zunehmender Halbmond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=14)):
|
|
||||||
return ("🌒 Zunehmender Sichelmond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=16)):
|
|
||||||
return ("🌑 Neumond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=20)):
|
|
||||||
return ("🌘 Abnehmender Sichelmond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=24)):
|
|
||||||
return ("🌗 Abnehmender Halbmond\n" + till_next_full_text)
|
|
||||||
if (till_next_full < timedelta(days=28.5)):
|
|
||||||
return ("🌖 Abnehmender Dreiviertelmond\n" + till_next_full_text)
|
|
||||||
return ("🌕 Vollmond")
|
|
||||||
|
|
||||||
|
|
||||||
def strfdelta(tdelta, fmt):
|
|
||||||
d = {"days": tdelta.days}
|
|
||||||
d["hours"], rem = divmod(tdelta.seconds, 3600)
|
|
||||||
d["minutes"], d["seconds"] = divmod(rem, 60)
|
|
||||||
return fmt.format(**d)
|
|
||||||
|
|
||||||
|
|
||||||
def till_next_full_as_text(mday):
|
|
||||||
nmoon = next_full_moon(mday)
|
|
||||||
till_next_full = nmoon-mday
|
|
||||||
return (strfdelta(till_next_full, "{days} Tage {hours} Stunden bis Vollmond"))
|
|
|
@ -1,2 +0,0 @@
|
||||||
Mastodon.py
|
|
||||||
pytz
|
|
Loading…
Reference in a new issue