Upload New File

This commit is contained in:
SideMatter 2021-06-28 00:43:58 +00:00
parent 36124269dd
commit 114fbdd500

160
dbrand.py Normal file
View file

@ -0,0 +1,160 @@
import jarvis
import re
import aiohttp
import html
from jarvis.config import get_config
from jarvis.utils import build_embed
from jarvis.utils.field import Field
from jarvis.data.dbrand import shipping_lookup
from discord.ext import commands
class DbrandCog(commands.Cog):
"""
dbrand functions for J.A.R.V.I.S.
Mostly support functions. Credit @cpixl for the shipping API
"""
def __init__(self, bot):
self.bot = bot
self.base_url = "https://dbrand.com/"
self._session = aiohttp.ClientSession()
self._session.headers.update({"Content-Type": "application/json"})
self.api_url = get_config().urls["dbrand_shipping"]
@commands.group(name="db", aliases=["dbrand"], pass_context=True)
async def _db(self, ctx):
if ctx.invoked_subcommand is None:
await ctx.send(
"Available subcommands: `grip`, `support`, "
+ "`skin`, `prism`, `shipping`"
)
@_db.command(name="skin", aliases=["skins", "tape"])
async def _skin(self, ctx):
await ctx.send(self.base_url + "shop/skins")
@_db.command(name="robotcamo", aliases=["rc", "robot"])
async def _skin(self, ctx):
await ctx.send(self.base_url + "shop/special-edition/robot-camo")
@_db.command(name="grip", aliases=["g", "case"])
async def _grip(self, ctx):
await ctx.send(self.base_url + "shop/grip/#grip-devices")
@_db.command(name="support", aliases=["help", "contact"])
async def _support(self, ctx):
await ctx.send(self.base_url + "contact")
@_db.command(name="shipping", aliases=["ship", "s"])
async def _shipping(self, ctx, *, search: str):
if not re.match(r"^[A-Z- ]+$", search, re.IGNORECASE):
if re.match(
r"^[\U0001f1e6-\U0001f1ff]{2}$",
search,
re.IGNORECASE,
):
# Magic number, subtract from flag char to get ascii char
uni2ascii = 127365
search = chr(ord(search[0]) - uni2ascii) + chr(
ord(search[1]) - uni2ascii
)
else:
await ctx.send("Please use text to search for shipping.")
return
if len(search) > 2:
matches = [
x["code"]
for x in shipping_lookup
if search.lower() in x["country"]
]
if len(matches) > 0:
search = matches[0]
dest = search
api_link = self.api_url + dest
try:
data = await self._session.get(api_link)
except Exception as e:
print(e)
fields = None
if 200 <= data.status < 400:
data = await data.json()
else:
data = None
if (
data is not None
and data["is_valid"]
and data["shipping_available"]
):
fields = []
fields.append(Field(data["short-name"], data["time-title"]))
for service in data["shipping_services_available"][1:]:
service_data = await self._session.get(
self.api_url + dest + "/" + service["url"]
)
if service_data.status > 400:
continue
service_data = await service_data.json()
fields.append(
Field(
service_data["short-name"],
service_data["time-title"],
)
)
country = "-".join(
x for x in data["country"].split(" ") if x != "the"
)
country_urlsafe = country.replace("-", "%20")
description = f"Click the link above to see shipping time to {data['country']}."
description += "\n[View all shipping destinations](https://dbrand.com/shipping)"
description += " | [Check shipping status]"
description += f"(https://dbrand.com/status#main-content:~:text={country_urlsafe})"
embed = build_embed(
title="Shipping to {}".format(data["country"]),
description=description,
color="#FFBB00",
fields=fields,
url=self.base_url + "shipping/" + country,
)
embed.set_thumbnail(url=self.base_url + data["country_flag"][1:])
embed.set_footer(
text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png",
)
await ctx.send(embed=embed)
elif not data["is_valid"]:
embed = build_embed(
title="Check Shipping Times",
description="Country not found.\nYou can [view all shipping "
+ "destinations here](https://dbrand.com/shipping)",
fields=[],
url="https://dbrand.com/shipping",
color="#FFBB00",
)
embed.set_thumbnail(url="https://dev.zevaryx.com/db_logo.png")
embed.set_footer(
text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png",
)
await ctx.send(embed=embed)
elif not data["shipping_available"]:
embed = build_embed(
title="Shipping to {}".format(data["country"]),
description="No shipping available.\nTime to move to a country"
+ " that has shipping available.\nYou can [find a new country "
+ "to live in here](https://dbrand.com/shipping)",
fields=[],
url="https://dbrand.com/shipping",
color="#FFBB00",
)
embed.set_thumbnail(url=self.base_url + data["country_flag"][1:])
embed.set_footer(
text="dbrand.com",
icon_url="https://dev.zevaryx.com/db_logo.png",
)
await ctx.send(embed=embed)
def setup(bot):
bot.add_cog(DbrandCog(bot))