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

Aggiungi un mostro

This commit is contained in:
Steffo 2020-05-14 01:08:36 +02:00
parent d05c2cd988
commit 37445585c5
Signed by: steffo
GPG key ID: 896A80F55F7C97F0
3 changed files with 178 additions and 6 deletions

View file

@ -17,7 +17,6 @@ class GivefiorygiCommand(rc.Command):
user_arg = args[0] user_arg = args[0]
qty_arg = args[1] qty_arg = args[1]
reason_arg = " ".join(args[2:])
if user_arg is None: if user_arg is None:
raise rc.InvalidInputError("Non hai specificato un destinatario!") raise rc.InvalidInputError("Non hai specificato un destinatario!")
@ -34,11 +33,8 @@ class GivefiorygiCommand(rc.Command):
if qty <= 0: if qty <= 0:
raise rc.InvalidInputError("La quantità specificata deve essere almeno 1!") raise rc.InvalidInputError("La quantità specificata deve essere almeno 1!")
if reason_arg == "":
raise rc.InvalidInputError("Non hai specificato un motivo!")
if author.fiorygi.fiorygi < qty: if author.fiorygi.fiorygi < qty:
raise rc.InvalidInputError("Non hai abbastanza fiorygi per effettuare la transazione!") raise rc.InvalidInputError("Non hai abbastanza fiorygi per effettuare la transazione!")
await FiorygiTransaction.spawn_fiorygi(data, author, -qty, reason_arg) await FiorygiTransaction.spawn_fiorygi(data, author, -qty, f"aver ceduto fiorygi a {user}")
await FiorygiTransaction.spawn_fiorygi(data, user, qty, reason_arg) await FiorygiTransaction.spawn_fiorygi(data, user, qty, f"aver ricevuto fiorygi da {user}")

View file

@ -14,6 +14,7 @@ from .api_polls_create import ApiPollsCreate
from .api_polls_get import ApiPollsGet from .api_polls_get import ApiPollsGet
from .api_polls_list import ApiPollsList from .api_polls_list import ApiPollsList
from .api_cvstats_latest import ApiCvstatsLatestStar from .api_cvstats_latest import ApiCvstatsLatestStar
from .api_cvstats_avg import ApiCvstatsAvgStar
# Enter the PageStars of your Pack here! # Enter the PageStars of your Pack here!
available_page_stars = [ available_page_stars = [
@ -32,6 +33,7 @@ available_page_stars = [
ApiPollsGet, ApiPollsGet,
ApiPollsList, ApiPollsList,
ApiCvstatsLatestStar, ApiCvstatsLatestStar,
ApiCvstatsAvgStar,
] ]
# Don't change this, it should automatically generate __all__ # Don't change this, it should automatically generate __all__

View file

@ -0,0 +1,174 @@
import royalnet.utils as ru
from royalnet.backpack.tables import *
from royalnet.constellation.api import *
from ..tables import Cvstats
class ApiCvstatsAvgStar(ApiStar):
path = "/api/cvstats/avg/v1"
methods = ["GET"]
summary = "Get some averages on the cvstats."
tags = ["cvstats"]
async def api(self, data: ApiData) -> ru.JSON:
results = data.session.execute("""
SELECT *
FROM (
SELECT date_part('hour', c.h) ph,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM (
SELECT date_trunc('hour', c.timestamp) h,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM cvstats c
GROUP BY h
) c
GROUP BY ph
) all_time
JOIN
(
SELECT date_part('hour', c.h) ph,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM (
SELECT date_trunc('hour', c.timestamp) h,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM cvstats c
WHERE c.timestamp BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
GROUP BY h
) c
GROUP BY ph
) last_week ON last_week.ph = all_time.ph
JOIN
(
SELECT date_part('hour', c.h) ph,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM (
SELECT date_trunc('hour', c.timestamp) h,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM cvstats c
WHERE c.timestamp BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-30
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
GROUP BY h
) c
GROUP BY ph
) last_month ON last_month.ph = all_time.ph
JOIN
(
SELECT date_part('hour', c.h) ph,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM (
SELECT date_trunc('hour', c.timestamp) h,
AVG(c.members_connected) members_connected,
AVG(c.users_connected) users_connected,
AVG(c.members_online) members_online,
AVG(c.users_online) users_online,
AVG(c.members_playing) members_playing,
AVG(c.users_playing) users_playing,
AVG(c.members_total) members_total,
AVG(c.users_total) users_total
FROM cvstats c
WHERE c.timestamp BETWEEN
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-1
AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER
GROUP BY h
) c
GROUP BY ph
) last_day ON last_day.ph = all_time.ph;
""")
return [{
"h": r[0],
"all_time": {
"members_connected": float(r[1]),
"users_connected": float(r[2]),
"members_online": float(r[3]),
"users_online": float(r[4]),
"members_playing": float(r[5]),
"users_playing": float(r[6]),
"members_total": float(r[7]),
"users_total": float(r[8])
},
"last_week": {
"members_connected": float(r[10]),
"users_connected": float(r[11]),
"members_online": float(r[12]),
"users_online": float(r[13]),
"members_playing": float(r[14]),
"users_playing": float(r[15]),
"members_total": float(r[16]),
"users_total": float(r[17])
},
"last_month": {
"members_connected": float(r[19]),
"users_connected": float(r[20]),
"members_online": float(r[21]),
"users_online": float(r[22]),
"members_playing": float(r[23]),
"users_playing": float(r[24]),
"members_total": float(r[25]),
"users_total": float(r[26])
},
"last_day": {
"members_connected": float(r[28]),
"users_connected": float(r[29]),
"members_online": float(r[30]),
"users_online": float(r[31]),
"members_playing": float(r[32]),
"users_playing": float(r[33]),
"members_total": float(r[34]),
},
} for r in sorted(results.fetchall(), key=lambda s: s[0])]