mirror of
https://github.com/nexy7574/LCC-bot.git
synced 2024-09-19 18:16:34 +01:00
Merge remote-tracking branch 'origin/http' into http
This commit is contained in:
commit
57393cc3a3
2 changed files with 131 additions and 3 deletions
|
@ -96,10 +96,24 @@ class Events(commands.Cog):
|
|||
else:
|
||||
# Respond to shronk bot
|
||||
if message.author.id == 1063875884274163732 and message.channel.can_send():
|
||||
if "pissylicious 💦💦" in message.content:
|
||||
from dns import asyncresolver
|
||||
import httpx
|
||||
response = await asyncresolver.resolve("shronkservz.tk", "A")
|
||||
ip_info_response = await httpx.AsyncClient().get(f"http://ip-api.com/json/{response[0].address}")
|
||||
if ip_info_response.status_code == 200:
|
||||
return await message.reply(
|
||||
f"Scattylicious\N{pile of poo}\N{pile of poo}\n"
|
||||
"IP: {0[query]}\n"
|
||||
"ISP: {0[isp]}\n"
|
||||
"Latitude: {0[lat]}\n"
|
||||
"Longitude: {0[lon]}\n".format(
|
||||
ip_info_response.json(),
|
||||
)
|
||||
)
|
||||
RESPONSES = {
|
||||
"Congratulations!!": "Shut up SHRoNK Bot, nobody loves you.",
|
||||
"You run on a Raspberry Pi... I run on a real server": "At least my server gets action, "
|
||||
"while yours just sits and collects dust!"
|
||||
"You run on a Raspberry Pi... I run on a real server": "At least my server gets action, while yours just sits and collects dust!"
|
||||
}
|
||||
for k, v in RESPONSES.items():
|
||||
if k in message.content:
|
||||
|
|
116
cogs/uptime.py
116
cogs/uptime.py
|
@ -1,6 +1,7 @@
|
|||
import asyncio
|
||||
import datetime
|
||||
import json
|
||||
import random
|
||||
import hashlib
|
||||
import time
|
||||
from datetime import timedelta
|
||||
|
@ -333,6 +334,8 @@ class UptimeCompetition(commands.Cog):
|
|||
targets = [query_target]
|
||||
if query_target == "ALL":
|
||||
targets = [t["id"] for t in self.cached_targets]
|
||||
|
||||
total_query_time = rows = 0
|
||||
embeds = []
|
||||
for _target in targets:
|
||||
_target = self.get_target(_target, _target)
|
||||
|
@ -343,11 +346,12 @@ class UptimeCompetition(commands.Cog):
|
|||
start = time.time()
|
||||
entries = await query.all()
|
||||
end = time.time()
|
||||
total_query_time += end - start
|
||||
if not entries:
|
||||
embeds.append(discord.Embed(description=f"No uptime entries found for {_target}."))
|
||||
else:
|
||||
embeds.append(await asyncio.to_thread(generate_embed, _target, entries))
|
||||
embeds[-1].set_footer(text=f"Query took {end - start:.2f}s")
|
||||
embeds[-1].set_footer(text=f"Query took {end - start:.2f}s | {len(entries):,} rows")
|
||||
|
||||
if org_target == "ALL":
|
||||
new_embed = discord.Embed(
|
||||
|
@ -357,9 +361,119 @@ class UptimeCompetition(commands.Cog):
|
|||
)
|
||||
for embed_ in embeds:
|
||||
new_embed.description += f"{embed_.description}\n"
|
||||
if total_query_time > 60:
|
||||
minutes, seconds = divmod(total_query_time, 60)
|
||||
new_embed.set_footer(text=f"Total query time: {minutes:.0f}m {seconds:.2f}s")
|
||||
else:
|
||||
new_embed.set_footer(text=f"Total query time: {total_query_time:.2f}s")
|
||||
new_embed.set_footer(
|
||||
text=f"{new_embed.footer.text} | {len(entries):,} rows"
|
||||
)
|
||||
embeds = [new_embed]
|
||||
await ctx.respond(embeds=embeds)
|
||||
|
||||
@uptime.command(name="speedtest")
|
||||
@commands.is_owner()
|
||||
async def stats_speedtest(self, ctx: discord.ApplicationContext):
|
||||
"""Tests the database's speed"""
|
||||
await ctx.defer()
|
||||
|
||||
tests = {
|
||||
"all": None,
|
||||
"lookback_7_day": None,
|
||||
"lookback_30_day": None,
|
||||
"lookback_90_day": None,
|
||||
"lookback_365_day": None,
|
||||
"first": None,
|
||||
"random": None,
|
||||
}
|
||||
|
||||
async def run_test(name):
|
||||
match name:
|
||||
case "all":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.all()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, len(e)
|
||||
case "lookback_7_day":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.filter(
|
||||
UptimeEntry.columns.timestamp >= (discord.utils.utcnow() - timedelta(days=7)).timestamp()
|
||||
).all()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, len(e)
|
||||
case "lookback_30_day":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.filter(
|
||||
UptimeEntry.columns.timestamp >= (discord.utils.utcnow() - timedelta(days=30)).timestamp()
|
||||
).all()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, len(e)
|
||||
case "lookback_90_day":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.filter(
|
||||
UptimeEntry.columns.timestamp >= (discord.utils.utcnow() - timedelta(days=90)).timestamp()
|
||||
).all()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, len(e)
|
||||
case "lookback_365_day":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.filter(
|
||||
UptimeEntry.columns.timestamp >= (discord.utils.utcnow() - timedelta(days=365)).timestamp()
|
||||
).all()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, len(e)
|
||||
case "first":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.first()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, 1
|
||||
case "random":
|
||||
start = time.time()
|
||||
e = await UptimeEntry.objects.offset(
|
||||
random.randint(0, 1000)
|
||||
).first()
|
||||
end = time.time()
|
||||
return (end - start) * 1000, 1
|
||||
case _:
|
||||
raise ValueError(f"Unknown test name: {name}")
|
||||
|
||||
def gen_embed(_copy):
|
||||
embed = discord.Embed(
|
||||
title='\N{HOURGLASS} Speedtest Results',
|
||||
colour=discord.Colour.red()
|
||||
)
|
||||
for _name in _copy.keys():
|
||||
if _copy[_name] is None:
|
||||
embed.add_field(name=_name, value='Waiting...')
|
||||
else:
|
||||
_time, _row = _copy[_name]
|
||||
_time /= 1000
|
||||
rows_per_second = _row / _time
|
||||
|
||||
if _time >= 60:
|
||||
minutes, seconds = divmod(_time, 60)
|
||||
ts = f'{minutes:.0f}m {seconds:.2f}s'
|
||||
else:
|
||||
ts = f'{_time:.2f}s'
|
||||
|
||||
embed.add_field(
|
||||
name=_name,
|
||||
value=f'{ts}, {_row:,} rows ({rows_per_second:.2f} rows/s)'
|
||||
)
|
||||
return embed
|
||||
|
||||
embed = gen_embed(tests)
|
||||
ctx = await ctx.respond(embed=embed)
|
||||
|
||||
for test_key in tests.keys():
|
||||
tests[test_key] = await run_test(test_key)
|
||||
embed = gen_embed(tests)
|
||||
await ctx.edit(embed=embed)
|
||||
|
||||
embed.colour = discord.Colour.green()
|
||||
await ctx.edit(embed=embed)
|
||||
|
||||
@uptime.command(name="view-next-run")
|
||||
async def view_next_run(self, ctx: discord.ApplicationContext):
|
||||
"""View when the next uptime test will run."""
|
||||
|
|
Loading…
Reference in a new issue