Allow configuring IP servers
All checks were successful
Build and Publish Jimmy.2 / build_and_publish (push) Successful in 9s
All checks were successful
Build and Publish Jimmy.2 / build_and_publish (push) Successful in 9s
This commit is contained in:
parent
77b2fe03c0
commit
959d83f0b1
3 changed files with 38 additions and 5 deletions
|
@ -71,3 +71,9 @@ downloads_pdfs = true # If False, PDF links will not be downloaded and uploaded
|
||||||
enabled = true # whether any transcoding at all should be done. If false, no links or attachments are ever probed.
|
enabled = true # whether any transcoding at all should be done. If false, no links or attachments are ever probed.
|
||||||
hevc = true # Enables probing video links and converting any HEVC videos to H264+opus.
|
hevc = true # Enables probing video links and converting any HEVC videos to H264+opus.
|
||||||
on_demand = true # Enables transcoding any video to h264+opus when 📼 (VHS) is reacted.
|
on_demand = true # Enables transcoding any video to h264+opus when 📼 (VHS) is reacted.
|
||||||
|
|
||||||
|
[network]
|
||||||
|
ip_servers = [
|
||||||
|
"https://ip.i-am.nexus",
|
||||||
|
"https://ip.shronk.tech"
|
||||||
|
] # A list of SHRoNK IP servers. See: https://github.com/SHRoNK-Corporation/shronk-ip-spec/blob/main/RFS0001.md
|
||||||
|
|
|
@ -13,11 +13,13 @@ from discord.ext import commands
|
||||||
from dns import asyncresolver
|
from dns import asyncresolver
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.tree import Tree
|
from rich.tree import Tree
|
||||||
|
from conf import CONFIG
|
||||||
|
|
||||||
|
|
||||||
class NetworkCog(commands.Cog):
|
class NetworkCog(commands.Cog):
|
||||||
def __init__(self, bot: commands.Bot):
|
def __init__(self, bot: commands.Bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
self.config = CONFIG["network"]
|
||||||
|
|
||||||
@commands.slash_command()
|
@commands.slash_command()
|
||||||
async def ping(self, ctx: discord.ApplicationContext, target: str = None):
|
async def ping(self, ctx: discord.ApplicationContext, target: str = None):
|
||||||
|
@ -255,6 +257,21 @@ class NetworkCog(commands.Cog):
|
||||||
await ctx.defer()
|
await ctx.defer()
|
||||||
await ctx.respond(file=discord.File(f))
|
await ctx.respond(file=discord.File(f))
|
||||||
|
|
||||||
|
async def _fetch_ip_response(
|
||||||
|
self,
|
||||||
|
server: str,
|
||||||
|
lookup: str,
|
||||||
|
client: httpx.AsyncClient
|
||||||
|
) -> tuple[dict, float] | httpx.HTTPError | ConnectionError | json.JSONDecodeError:
|
||||||
|
try:
|
||||||
|
start = time.perf_counter()
|
||||||
|
response = await client.get(f"https://{server}/lookup?ip={lookup}")
|
||||||
|
end = time.perf_counter()
|
||||||
|
except (httpx.HTTPError, ConnectionError) as e:
|
||||||
|
return e
|
||||||
|
else:
|
||||||
|
return response.json(), round(end - start, 2)
|
||||||
|
|
||||||
@commands.slash_command(name="ip")
|
@commands.slash_command(name="ip")
|
||||||
async def get_ip_address(self, ctx: discord.ApplicationContext, lookup: str = None):
|
async def get_ip_address(self, ctx: discord.ApplicationContext, lookup: str = None):
|
||||||
"""Fetches IP info from SHRONK IP servers"""
|
"""Fetches IP info from SHRONK IP servers"""
|
||||||
|
@ -263,14 +280,23 @@ class NetworkCog(commands.Cog):
|
||||||
if not lookup:
|
if not lookup:
|
||||||
response = await client.get("https://api.ipify.org")
|
response = await client.get("https://api.ipify.org")
|
||||||
lookup = response.text
|
lookup = response.text
|
||||||
servers = [
|
|
||||||
|
servers = self.config.get(
|
||||||
|
"ip_servers",
|
||||||
|
[
|
||||||
"ip.shronk.net",
|
"ip.shronk.net",
|
||||||
"ip.i-am.nexus",
|
"ip.i-am.nexus",
|
||||||
"ip.shronk.nicroxio.co.uk"
|
"ip.shronk.nicroxio.co.uk"
|
||||||
]
|
]
|
||||||
|
)
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="IP lookup information for: %s" % lookup,
|
title="IP lookup information for: %s" % lookup,
|
||||||
)
|
)
|
||||||
|
if not servers:
|
||||||
|
embed.description = "No IP servers configured in config.toml."
|
||||||
|
embed.colour = discord.Color.red()
|
||||||
|
return await ctx.respond(embed=embed)
|
||||||
|
|
||||||
for server in servers:
|
for server in servers:
|
||||||
try:
|
try:
|
||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
|
|
|
@ -39,6 +39,7 @@ CONFIG.setdefault("jimmy", {})
|
||||||
CONFIG.setdefault("ollama", {})
|
CONFIG.setdefault("ollama", {})
|
||||||
CONFIG.setdefault("screenshot", {})
|
CONFIG.setdefault("screenshot", {})
|
||||||
CONFIG.setdefault("responder", {})
|
CONFIG.setdefault("responder", {})
|
||||||
|
CONFIG.setdefault("network", {})
|
||||||
CONFIG.setdefault("quote_a", {"channel": None})
|
CONFIG.setdefault("quote_a", {"channel": None})
|
||||||
CONFIG.setdefault("redis", {"host": "redis", "port": 6379, "decode_responses": True})
|
CONFIG.setdefault("redis", {"host": "redis", "port": 6379, "decode_responses": True})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue