fishyboteso/fishy/web/web.py

185 lines
4.8 KiB
Python
Raw Normal View History

import logging
import requests
from whatsmyip.ip import get_ip
from whatsmyip.providers import GoogleDnsProvider
2021-05-09 07:05:51 +00:00
from ..constants import apiversion
from ..helper.config import config
from . import urls
from .decorators import fallback, uses_session
_session_id = None
_online = True
def is_online():
return _online
@fallback(-1)
def is_logged_in():
if config.get("uid") is None:
return -1
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
response = requests.get(urls.discord, json=body)
logged_in = response.json()["discord_login"]
return 1 if logged_in else 0
@fallback(False)
def login(uid, login_code):
2021-05-09 09:09:26 +00:00
body = {"uid": uid, "login_code": login_code, "apiversion": apiversion}
reponse = requests.post(urls.discord, json=body)
result = reponse.json()
if "new_id" in result:
config.set("uid", result["new_id"])
return result["success"]
@fallback(False)
def logout():
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
reponse = requests.delete(urls.discord, json=body)
result = reponse.json()
return result["success"]
@fallback(None)
def _register_user():
ip = get_ip(GoogleDnsProvider)
body = {"ip": ip, "apiversion": apiversion}
response = requests.post(urls.user, json=body)
result = response.json()
return result["uid"]
@fallback(None)
2021-03-26 11:18:29 +00:00
def send_notification(message):
if not is_subbed()[0]:
return False
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "message": message, "apiversion": apiversion}
requests.post(urls.notify, json=body)
@uses_session
@fallback(None)
def send_fish_caught(fish_caught, hole_time, fish_times):
hole_data = {
"fish_caught": fish_caught,
"hole_time": hole_time,
"fish_times": fish_times,
"session": get_session()
}
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "hole_data": hole_data, "apiversion": apiversion}
requests.post(urls.hole_depleted, json=body)
@fallback(False)
def sub():
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
response = requests.post(urls.subscription, json=body)
2020-10-29 21:24:52 +00:00
result = response.json()
return result["success"]
@fallback((False, False))
def is_subbed():
"""
:return: Tuple[is_subbed, success]
"""
if config.get("uid") is None:
return False, False
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
response = requests.get(urls.subscription, json=body)
if response.status_code != 200:
return False, False
2022-02-02 23:59:10 +00:00
_is_subbed = response.json()["subbed"]
return _is_subbed, True
@fallback(None)
def unsub():
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
2020-10-29 21:24:52 +00:00
response = requests.delete(urls.subscription, json=body)
result = response.json()
return result["success"]
2020-10-17 19:06:07 +00:00
def get_session(lazy=True):
"""
this doesn't have @fallback as this doesn't actually make any web calls directly
this web call needs to be the first thing to be called, as it sets the online status
todo maybe shift this to web.init() or something to signify that
"""
global _session_id, _online
# lazy loading logic
if lazy and _session_id is not None:
return _session_id
# check if user has uid
uid = config.get("uid")
# then create session
if uid:
_session_id, _online = _create_new_session(uid)
# if not, create new id then try creating session again
else:
uid = _register_user()
2022-03-18 05:03:16 +00:00
config.set("uid", uid, True)
logging.debug(f"New User, generated new uid: {uid}")
if uid:
_session_id, _online = _create_new_session(uid)
else:
_online = False
# when the user is already registered but session is not created as uid is not found by the server
if _online and not _session_id:
logging.error("user not found, generating new uid.. contact dev if you don't want to loose data")
new_uid = _register_user()
_session_id, _online = _create_new_session(new_uid)
2022-03-18 05:03:16 +00:00
config.set("uid", new_uid, True)
config.set("old_uid", uid, True)
return _session_id
@fallback((None, False))
def _create_new_session(uid):
body = {"uid": uid, "apiversion": apiversion}
response = requests.post(urls.session, json=body, timeout=10)
if response.status_code == 405:
return None, True
2020-11-02 19:04:50 +00:00
return response.json()["session_id"], True
2020-11-02 19:04:50 +00:00
2022-03-18 05:03:16 +00:00
2020-11-02 19:04:50 +00:00
@fallback(False)
def has_beta():
2021-05-09 09:09:26 +00:00
body = {"uid": config.get("uid"), "apiversion": apiversion}
response = requests.get(urls.beta, json=body)
2020-11-02 19:04:50 +00:00
result = response.json()
if not result["success"]:
return False
return response.json()["beta"]
2021-05-16 03:04:35 +00:00
@fallback(None)
def ping():
body = {"uid": config.get("uid"), "apiversion": apiversion}
response = requests.post(urls.ping, json=body)
2022-03-18 05:03:16 +00:00
logging.debug(f"ping response: {response.json()}")