diff --git a/html/build/bundle.css b/html/build/bundle.css index d7aad14..e0c99ce 100644 --- a/html/build/bundle.css +++ b/html/build/bundle.css @@ -1 +1,176 @@ -main.svelte-cd7t1.svelte-cd7t1{margin:1em}button.svelte-cd7t1.svelte-cd7t1{white-space:nowrap}#searchbox.svelte-cd7t1.svelte-cd7t1{display:flex;margin-left:1px}#searchbox.svelte-cd7t1>*{margin-left:-1px}#searchbox.svelte-cd7t1 input[type="search"].svelte-cd7t1{flex-grow:1}@media(max-width: 700px){#searchbox.svelte-cd7t1.svelte-cd7t1{flex-direction:column}}.error.svelte-cd7t1.svelte-cd7t1{color:red;text-align:center}.info.svelte-cd7t1.svelte-cd7t1{display:flex;justify-content:center}.info.svelte-cd7t1>.svelte-cd7t1{padding:0.5em 1em;margin:1em 0}.info.svelte-cd7t1>p.svelte-cd7t1{border:1px #bfbfbf solid;border-radius:2em}input,button,select{border-radius:0;border:1px solid var(--color-inactive);height:2.3em}input:focus,button:focus,select:focus{border-color:var(--color-active);outline:1px solid var(--color-active);z-index:10}:root{--color-inactive:#bfbfbf;--color-active:#add8e6}.message.svelte-15hb0c4.svelte-15hb0c4{margin:1em 0;padding:0.5em;max-width:max-content;border:1px #eeeeee solid;box-shadow:0 0 3px gray;border-radius:5px;display:flex}.avatar.svelte-15hb0c4.svelte-15hb0c4{padding-right:0.5em}.content.svelte-15hb0c4.svelte-15hb0c4{overflow:hidden}.name.svelte-15hb0c4.svelte-15hb0c4{white-space:nowrap;color:#1e90ff;overflow:hidden;text-overflow:ellipsis}.text.svelte-15hb0c4.svelte-15hb0c4{white-space:pre-wrap;margin:0.2em 0}.text.svelte-15hb0c4>.keyword{background-color:#ffffab}.time.svelte-15hb0c4.svelte-15hb0c4{font-size:0.75em;float:right;margin-right:2px}.time.svelte-15hb0c4.svelte-15hb0c4,.time.svelte-15hb0c4>a.svelte-15hb0c4{color:gray}div.svelte-179qc5o.svelte-179qc5o{position:relative}ul.svelte-179qc5o.svelte-179qc5o{list-style:none;padding:0;margin:0;position:absolute;left:0;background-color:white;box-shadow:0 0 4px var(--color-inactive);clip-path:polygon(-100% 0, 200% 0, 200% 200%, -100% 200%)}li.svelte-179qc5o.svelte-179qc5o{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;line-height:2em}li.svelte-179qc5o>img.svelte-179qc5o{height:calc(2.3em - 2px);width:calc(2.3em - 2px);vertical-align:middle;padding-right:0.5em;display:inline-block;overflow:hidden}ul.svelte-179qc5o:not(:hover)>li.selected.svelte-179qc5o,li.svelte-179qc5o.svelte-179qc5o:hover{background-color:#d9f5ff}input.svelte-179qc5o.svelte-179qc5o{padding-left:2.5em;width:100%}input.svelte-179qc5o.svelte-179qc5o,ul.svelte-179qc5o.svelte-179qc5o{border-radius:0;border:1px solid var(--color-inactive)}input.svelte-179qc5o.svelte-179qc5o:focus,input.svelte-179qc5o:focus~ul.svelte-179qc5o{border-color:var(--color-active);box-shadow:0 0 4px var(--color-active);outline:1px solid var(--color-active)}input.svelte-179qc5o:focus~ul.svelte-179qc5o{border-top-color:var(--color-inactive)}.selected-avatar.svelte-179qc5o.svelte-179qc5o{position:absolute;pointer-events:none;top:1px;left:1px;height:calc(2.3em - 2px);width:calc(2.3em - 2px)}.hidden.svelte-179qc5o.svelte-179qc5o{display:none} \ No newline at end of file +main.svelte-cd7t1.svelte-cd7t1 { + margin: 1em +} + +button.svelte-cd7t1.svelte-cd7t1 { + white-space: nowrap +} + +#searchbox.svelte-cd7t1.svelte-cd7t1 { + display: flex; + margin-left: 1px +} + +#searchbox.svelte-cd7t1 > * { + margin-left: -1px +} + +#searchbox.svelte-cd7t1 input[type="search"].svelte-cd7t1 { + flex-grow: 1 +} + +@media (max-width: 700px) { + #searchbox.svelte-cd7t1.svelte-cd7t1 { + flex-direction: column + } +} + +.error.svelte-cd7t1.svelte-cd7t1 { + color: red; + text-align: center +} + +.info.svelte-cd7t1.svelte-cd7t1 { + display: flex; + justify-content: center +} + +.info.svelte-cd7t1 > .svelte-cd7t1 { + padding: 0.5em 1em; + margin: 1em 0 +} + +.info.svelte-cd7t1 > p.svelte-cd7t1 { + border: 1px #bfbfbf solid; + border-radius: 2em +} + +input, button, select { + border-radius: 0; + border: 1px solid var(--color-inactive); + height: 2.3em +} + +input:focus, button:focus, select:focus { + border-color: var(--color-active); + outline: 1px solid var(--color-active); + z-index: 10 +} + +:root { + --color-inactive: #bfbfbf; + --color-active: #add8e6 +} + +.message.svelte-15hb0c4.svelte-15hb0c4 { + margin: 1em 0; + padding: 0.5em; + max-width: max-content; + border: 1px #eeeeee solid; + box-shadow: 0 0 3px gray; + border-radius: 5px; + display: flex +} + +.avatar.svelte-15hb0c4.svelte-15hb0c4 { + padding-right: 0.5em +} + +.content.svelte-15hb0c4.svelte-15hb0c4 { + overflow: hidden +} + +.name.svelte-15hb0c4.svelte-15hb0c4 { + white-space: nowrap; + color: #1e90ff; + overflow: hidden; + text-overflow: ellipsis +} + +.text.svelte-15hb0c4.svelte-15hb0c4 { + white-space: pre-wrap; + margin: 0.2em 0 +} + +.text.svelte-15hb0c4 > .keyword { + background-color: #ffffab +} + +.time.svelte-15hb0c4.svelte-15hb0c4 { + font-size: 0.75em; + float: right; + margin-right: 2px +} + +.time.svelte-15hb0c4.svelte-15hb0c4, .time.svelte-15hb0c4 > a.svelte-15hb0c4 { + color: gray +} + +div.svelte-179qc5o.svelte-179qc5o { + position: relative +} + +ul.svelte-179qc5o.svelte-179qc5o { + list-style: none; + padding: 0; + margin: 0; + position: absolute; + left: 0; + background-color: white; + box-shadow: 0 0 4px var(--color-inactive); + clip-path: polygon(-100% 0, 200% 0, 200% 200%, -100% 200%) +} + +li.svelte-179qc5o.svelte-179qc5o { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; + line-height: 2em +} + +li.svelte-179qc5o > img.svelte-179qc5o { + height: calc(2.3em - 2px); + width: calc(2.3em - 2px); + vertical-align: middle; + padding-right: 0.5em; + display: inline-block; + overflow: hidden +} + +ul.svelte-179qc5o:not(:hover) > li.selected.svelte-179qc5o, li.svelte-179qc5o.svelte-179qc5o:hover { + background-color: #d9f5ff +} + +input.svelte-179qc5o.svelte-179qc5o { + padding-left: 2.5em; + width: 100% +} + +input.svelte-179qc5o.svelte-179qc5o, ul.svelte-179qc5o.svelte-179qc5o { + border-radius: 0; + border: 1px solid var(--color-inactive) +} + +input.svelte-179qc5o.svelte-179qc5o:focus, input.svelte-179qc5o:focus ~ ul.svelte-179qc5o { + border-color: var(--color-active); + box-shadow: 0 0 4px var(--color-active); + outline: 1px solid var(--color-active) +} + +input.svelte-179qc5o:focus ~ ul.svelte-179qc5o { + border-top-color: var(--color-inactive) +} + +.selected-avatar.svelte-179qc5o.svelte-179qc5o { + position: absolute; + pointer-events: none; + top: 1px; + left: 1px; + height: calc(2.3em - 2px); + width: calc(2.3em - 2px) +} + +.hidden.svelte-179qc5o.svelte-179qc5o { + display: none +} \ No newline at end of file diff --git a/html/stats.html b/html/stats.html new file mode 100644 index 0000000..ab2f880 --- /dev/null +++ b/html/stats.html @@ -0,0 +1,113 @@ + + + + + + 发言排行榜 - 星穹铁道 + + + + +
+

发言排行榜

+
+
+
+ +
+
+
+
+ +
+ + + + diff --git a/main.py b/main.py index 17b10da..d2ab3e5 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,7 @@ from starlette.staticfiles import StaticFiles app = FastAPI() local_api = "http://127.0.0.1:9008/luoxu/" +local_stats_api = "http://127.0.0.1:9010/api/" allowed_origins = [ "search-pub.xtaolabs.com", "127.0.0.1:9009", @@ -19,6 +20,7 @@ app.add_middleware( allow_headers=["*"], ) groups_id = [1366383997, 1797471403, 1936247070] +groups_stats_id = [-1001797471403] groups = { "groups": [ { @@ -76,6 +78,18 @@ async def read_avatar(avatar: str) -> StreamingResponse: return StreamingResponse(r.aiter_bytes(), media_type="image/png") +@app.get("/luoxu/stats/{gid}") +async def read_avatar(gid: str): + try: + if int(gid) not in groups_stats_id: + return [] + except Exception: + return [] + async with AsyncClient(timeout=60) as client: + r = await client.get(f"{local_stats_api}group_analytics?cid={gid}") + return r.json() + + @app.get("/") async def redirect_to_html(): return RedirectResponse(url="/index.html")