qrm2/exts/dxcc.py

76 lines
2.2 KiB
Python

"""
DXCC Prefix Lookup extension for qrm
---
Copyright (C) 2019-2020 classabbyamp, 0x5c (as lookup.py)
Copyright (C) 2021-2023 classabbyamp, 0x5c
SPDX-License-Identifier: LiLiQ-Rplus-1.1
"""
import threading
from pathlib import Path
from ctyparser import BigCty
from discord.ext import commands, tasks
import common as cmn
cty_path = Path("./data/cty.json")
class DXCCCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
try:
self.cty = BigCty(cty_path)
except OSError:
self.cty = BigCty()
@commands.command(name="dxcc", aliases=["dx"], category=cmn.Cats.LOOKUP)
async def _dxcc_lookup(self, ctx: commands.Context, query: str):
"""Gets DXCC info about a callsign prefix."""
query = query.upper()
full_query = query
embed = cmn.embed_factory(ctx)
embed.title = "DXCC Info for "
embed.description = f"*Last Updated: {self.cty.formatted_version}*"
embed.colour = cmn.colours.bad
while query:
if query in self.cty.keys():
data = self.cty[query]
embed.add_field(name="Entity", value=data["entity"])
embed.add_field(name="CQ Zone", value=data["cq"])
embed.add_field(name="ITU Zone", value=data["itu"])
embed.add_field(name="Continent", value=data["continent"])
embed.add_field(name="Time Zone",
value=f"+{data['tz']}" if data["tz"] > 0 else str(data["tz"]))
embed.title += query
embed.colour = cmn.colours.good
break
else:
query = query[:-1]
else:
embed.title += full_query + " not found"
embed.colour = cmn.colours.bad
await ctx.send(embed=embed)
@tasks.loop(hours=24)
async def _update_cty(self):
update = threading.Thread(target=run_update, args=(self.cty, cty_path))
update.start()
def run_update(cty_obj, dump_loc):
update = cty_obj.update()
if update:
cty_obj.dump(dump_loc)
def setup(bot: commands.Bot):
dxcccog = DXCCCog(bot)
bot.add_cog(dxcccog)
dxcccog._update_cty.start()