1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Some new spooky stuff

This commit is contained in:
Steffo 2018-10-01 17:46:06 +02:00
parent 1f3f78ac65
commit 7d59664c48
6 changed files with 1589 additions and 58 deletions

124
db.py
View file

@ -12,6 +12,7 @@ import re
import enum
from discord import User as DiscordUser
from telegram import User as TelegramUser
import loldata
# Init the config reader
import configparser
@ -353,6 +354,7 @@ class LeagueOfLegends(Base):
royal = relationship("Royal", backref="lol", lazy="joined")
summoner_id = Column(BigInteger, primary_key=True)
account_id = Column(BigInteger)
summoner_name = Column(String)
level = Column(Integer)
@ -370,31 +372,6 @@ class LeagueOfLegends(Base):
return f"<LeagueOfLegends {self.summoner_id}>"
return f"<LeagueOfLegends {(''.join([x if x.isalnum else '' for x in self.summoner_name]))}>"
@staticmethod
def create(session: Session, royal_id, summoner_name=None, summoner_id=None):
if summoner_name:
lol = session.query(LeagueOfLegends).filter(LeagueOfLegends.summoner_name == summoner_name).first()
elif summoner_id:
lol = session.query(LeagueOfLegends).get(summoner_id)
else:
raise SyntaxError("Neither summoner_name or summoner_id were specified.")
if lol is not None:
raise AlreadyExistingError(repr(lol))
# Get the summoner_id
if summoner_name:
r = requests.get(f"https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/{summoner_name}?api_key={config['League of Legends']['riot_api_key']}")
else:
r = requests.get(f"https://euw1.api.riotgames.com/lol/summoner/v3/summoners/{summoner_id}?api_key={config['League of Legends']['riot_api_key']}")
if r.status_code != 200:
return RequestError(f"League of Legends API returned {r.status_code}")
data = r.json()
lol = LeagueOfLegends(royal_id=royal_id,
summoner_id=data["id"],
summoner_name=data["name"],
level=data["summonerLevel"])
lol.update()
return lol
def update(self) -> bool:
r = requests.get(f"https://euw1.api.riotgames.com/lol/summoner/v3/summoners/{self.summoner_id}?api_key={config['League of Legends']['riot_api_key']}")
if r.status_code != 200:
@ -420,6 +397,7 @@ class LeagueOfLegends(Base):
twtr_rank = league
self.summoner_id = data["id"]
self.summoner_name = data["name"]
self.account_id = data["accountId"]
self.level = data["summonerLevel"]
if solo_rank is not None:
self.solo_division = LeagueOfLegendsRanks[solo_rank["tier"]]
@ -441,6 +419,14 @@ class LeagueOfLegends(Base):
self.twtr_rank = None
self.highest_mastery_champ = mastery[0]["championId"]
def highest_mastery_champ_name(self):
champ = loldata.get_champ_by_key(self.highest_mastery_champ)
return champ["name"]
def highest_mastery_champ_image(self):
champ = loldata.get_champ_by_key(self.highest_mastery_champ)
return loldata.get_champ_icon(champ["name"])
class Osu(Base):
__tablename__ = "osu"
@ -894,16 +880,92 @@ class LoginToken(Base):
return f"<LoginToken for {self.royal.username}>"
class EETrigger(Base):
__tablename__ = "eetriggers"
class Halloween(Base):
"""This is some nice spaghetti, don't you think?"""
__tablename__ = "halloween"
royal_id = Column(Integer, ForeignKey("royals.id"), primary_key=True)
royal = relationship("Royal", backref="triggers", lazy="joined")
royal = relationship("Royal", backref="halloween", lazy="joined")
stage = Column(String, nullable=False)
first_trigger = Column(DateTime)
def __repr__(self):
return f"<EETrigger of {self.royal.username}: {self.stage}>"
puzzle_piece_a = Column(DateTime)
puzzle_piece_b = Column(DateTime)
puzzle_piece_c = Column(DateTime)
puzzle_piece_d = Column(DateTime)
puzzle_piece_e = Column(DateTime)
puzzle_piece_f = Column(DateTime)
puzzle_piece_g = Column(DateTime)
puzzle_piece_h = Column(DateTime)
puzzle_piece_i = Column(DateTime)
puzzle_piece_j = Column(DateTime)
boss_battle = Column(DateTime)
def pieces_completed(self) -> int:
count = 0
if puzzle_piece_a is not None:
count += 1
if puzzle_piece_b is not None:
count += 1
if puzzle_piece_c is not None:
count += 1
if puzzle_piece_d is not None:
count += 1
if puzzle_piece_e is not None:
count += 1
if puzzle_piece_f is not None:
count += 1
if puzzle_piece_g is not None:
count += 1
if puzzle_piece_h is not None:
count += 1
if puzzle_piece_i is not None:
count += 1
if puzzle_piece_j is not None:
count += 1
return count
@staticmethod
def puzzle_is_complete() -> bool:
session = db.Session()
halloweens = session.query(Halloween).all()
session.close()
completed_a = False
completed_b = False
completed_c = False
completed_d = False
completed_e = False
completed_f = False
completed_g = False
completed_h = False
completed_i = False
completed_j = False
for halloween in halloweens:
if halloween.puzzle_piece_a is not None:
completed_a = True
if halloween.puzzle_piece_b is not None:
completed_b = True
if halloween.puzzle_piece_c is not None:
completed_c = True
if halloween.puzzle_piece_d is not None:
completed_d = True
if halloween.puzzle_piece_d is not None:
completed_d = True
if halloween.puzzle_piece_e is not None:
completed_e = True
if halloween.puzzle_piece_f is not None:
completed_f = True
if halloween.puzzle_piece_g is not None:
completed_g = True
if halloween.puzzle_piece_h is not None:
completed_h = True
if halloween.puzzle_piece_i is not None:
completed_i = True
if halloween.puzzle_piece_j is not None:
completed_j = True
return (completed_a and completed_b and completed_c and completed_d and completed_e
and completed_f and completed_g and completed_h and completed_i and completed_j)
# If run as script, create all the tables in the db

1447
loldata.py Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,11 @@
@background-color: #0d193b;
@text-color: #a0ccff;
@background-color: #0d0303;
@text-color: #ff8080;
@quote-color: #a0ffcc;
@spoiler-color: #ffa0cc;
@highlight-color: #ffff95;
@accent-color: white;
@accent-color: #ffcccc;
@link-color: #00aaff;
@visited-color: #aa66ff;
@old-ryg-color: #ff7f00;
body {
font-family: sans-serif;
@ -127,6 +126,7 @@ nav {
width: 32px;
height: 32px;
vertical-align: middle;
border-radius: 32px;
}
.left
@ -482,7 +482,7 @@ table {
border: 3px solid #463714;
background-color: #010a13;
grid-row-gap: 5px;
grid-template-columns: 40% 20% 20% 20%;
grid-template-columns: 20% 20% 20% 20% 20%;
.player {
grid-row: 1;
@ -502,18 +502,26 @@ table {
font-size: x-large;
}
.soloq {
.mastery {
grid-column: 2;
}
.flexq {
.game-score.mastery {
border-radius: 40px;
}
.soloq {
grid-column: 3;
}
.twtrq {
.flexq {
grid-column: 4;
}
.twtrq {
grid-column: 5;
}
.game-title {
text-align: center;
}
@ -641,7 +649,7 @@ table {
}
.ryg {
background-color: rgba(red(@accent-color), green(@accent-color), blue(@accent-color), 0.1);
background-color: rgba(red(@text-color), green(@text-color), blue(@text-color), 0.1);
padding: 18px;
grid-template-columns: 80% 20%;
@ -769,7 +777,7 @@ table {
}
}
.entry {
ntry {
display: grid;
.left {
@ -870,22 +878,26 @@ table {
}
}
.ee {
color: @old-ryg-color;
cursor: pointer;
&:hover {
text-decoration: underline #ff7f00;
@keyframes shake {
0%, 100% {
transform: translate(2px, 2px);
}
&:active {
text-decoration: underline white;
}
20%, 80% {
transform: translate(-2px, -2px);
}
.eeclear {
opacity: 0.8;
cursor: help;
40% {
transform: translate(2px, -2px);
}
60% {
transform: translate(-2px, 2px);
}
10%, 30%, 50%, 70%, 90% {
transform: translate(0px, 0px);
}
}
#debug-mode {

View file

@ -14,7 +14,7 @@
mode: "same-origin",
credentials: "same-origin"
});
document.getElementById("main-title").innerHTML = '<span class="eeclear" title="Soon, my pupil.">R</span>oyal Games';
document.getElementById("main-title").innerHTML = '<span class="eetip" title="When there is something strange, in the neighbourhood, who you gonna call?">R</span>oyal Games';
audio.play();
}
</script>
@ -22,7 +22,7 @@
{% block body %}
<h1 id="main-title">
<span {% if triggerable_r %}class="ee" onclick="ee()" {% else %}class="eeclear" title="Soon, my pupil."{% endif %}>R</span>oyal Games
Royal Games
</h1>
<div class="main-page">
<div class="left">

View file

@ -16,6 +16,12 @@
<div class="game-score level">
<span>{{ record.level }}</span>
</div>
<div class="game-title mastery">
MAIN
</div>
<div class="game-score mastery">
<img src="{{ record.highest_mastery_champ_image() }}" title="{{ record.highest_mastery_champ_name() }}" class="rank">
</div>
<div class="game-title soloq">
SOLO/DUO
</div>

View file

@ -66,10 +66,9 @@ def page_main():
random_diario = db_session.query(db.Diario).order_by(db.func.random()).first()
next_events = db_session.query(db.Event).filter(db.Event.time > datetime.datetime.now()).order_by(
db.Event.time).all()
triggerable_r = not bool(db_session.query(db.EETrigger).filter_by(royal_id=fl_session["user_id"]).one_or_none())
db_session.close()
return render_template("main.html", royals=royals, wiki_pages=wiki_pages, entry=random_diario,
next_events=next_events, rygconf=config, escape=escape, triggerable_r=triggerable_r)
next_events=next_events, rygconf=config, escape=escape)
@app.route("/profile/<name>")
@ -208,7 +207,12 @@ def page_game(name: str):
elif name == "lol":
game_name = "League of Legends"
query = db_session.query(db.LeagueOfLegends).order_by(db.LeagueOfLegends.solo_division.desc().nullslast(),
db.LeagueOfLegends.solo_rank).all()
db.LeagueOfLegends.solo_rank,
db.LeagueOfLegends.flex_division.desc().nullslast(),
db.LeagueOfLegends.flex_rank,
db.LeagueOfLegends.twtr_division.desc().nullslast(),
db.LeagueOfLegends.twtr_rank,
db.LeagueOfLegends.level).all()
elif name == "osu":
game_name = "osu!"
query = db_session.query(db.Osu).order_by(db.Osu.mania_pp.desc().nullslast()).all()