139 lines
3.6 KiB
Python
139 lines
3.6 KiB
Python
"""A collection of utility functions that can be used in various places."""
|
|
|
|
import aiohttp
|
|
import logging
|
|
import async_timeout
|
|
|
|
from discord import Interaction, Embed, Colour
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
async def fetch(session, url: str) -> str:
|
|
async with async_timeout.timeout(20):
|
|
async with session.get(url) as response:
|
|
return await response.text()
|
|
|
|
async def get_unparsed_feed(url: str, session: aiohttp.ClientSession=None):
|
|
if session is not None:
|
|
return await fetch(session, url)
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
return await fetch(session, url)
|
|
|
|
async def get_rss_data(url: str):
|
|
async with aiohttp.ClientSession() as session:
|
|
async with session.get(url) as response:
|
|
items = await response.text(), response.status
|
|
|
|
return items
|
|
|
|
async def followup(inter: Interaction, *args, **kwargs):
|
|
"""Shorthand for following up on an interaction.
|
|
|
|
Parameters
|
|
----------
|
|
inter : Interaction
|
|
Represents an app command interaction.
|
|
"""
|
|
|
|
await inter.followup.send(*args, **kwargs)
|
|
|
|
async def audit(cog, *args, **kwargs):
|
|
"""Shorthand for auditing an interaction."""
|
|
|
|
await cog.bot.audit(*args, **kwargs)
|
|
|
|
|
|
# https://img.icons8.com/fluency-systems-filled/48/FA5252/trash.png
|
|
|
|
|
|
class FollowupIcons:
|
|
error = "https://img.icons8.com/fluency-systems-filled/48/DC573C/box-important.png"
|
|
success = "https://img.icons8.com/fluency-systems-filled/48/5BC873/ok--v1.png"
|
|
trash = "https://img.icons8.com/fluency-systems-filled/48/DC573C/trash.png"
|
|
info = "https://img.icons8.com/fluency-systems-filled/48/4598DA/info.png"
|
|
added = "https://img.icons8.com/fluency-systems-filled/48/4598DA/plus.png"
|
|
assigned = "https://img.icons8.com/fluency-systems-filled/48/4598DA/hashtag-large.png"
|
|
|
|
|
|
class Followup:
|
|
"""Wrapper for a discord embed to follow up an interaction."""
|
|
|
|
def __init__(
|
|
self,
|
|
title: str = None,
|
|
description: str = None,
|
|
):
|
|
self._embed = Embed(
|
|
title=title,
|
|
description=description
|
|
)
|
|
|
|
async def send(self, inter: Interaction, message: str = None):
|
|
""""""
|
|
|
|
await inter.followup.send(content=message, embed=self._embed)
|
|
|
|
def fields(self, inline: bool = False, **fields: dict):
|
|
""""""
|
|
|
|
for key, value in fields.items():
|
|
self._embed.add_field(name=key, value=value, inline=inline)
|
|
|
|
return self
|
|
|
|
def image(self, url: str):
|
|
""""""
|
|
|
|
self._embed.set_image(url=url)
|
|
|
|
return self
|
|
|
|
def error(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.red()
|
|
self._embed.set_thumbnail(url=FollowupIcons.error)
|
|
return self
|
|
|
|
def success(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.green()
|
|
self._embed.set_thumbnail(url=FollowupIcons.success)
|
|
return self
|
|
|
|
def info(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.blue()
|
|
self._embed.set_thumbnail(url=FollowupIcons.info)
|
|
return self
|
|
|
|
def added(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.blue()
|
|
self._embed.set_thumbnail(url=FollowupIcons.added)
|
|
return self
|
|
|
|
def assign(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.blue()
|
|
self._embed.set_thumbnail(url=FollowupIcons.assigned)
|
|
return self
|
|
|
|
def trash(self):
|
|
""""""
|
|
|
|
self._embed.colour = Colour.red()
|
|
self._embed.set_thumbnail(url=FollowupIcons.trash)
|
|
return self
|
|
|
|
|
|
def extract_error_info(error: Exception) -> str:
|
|
class_name = error.__class__.__name__
|
|
desc = str(error)
|
|
return class_name, desc
|