feat: add dicebear support
This commit is contained in:
parent
698a12b693
commit
a96b3bf858
4 changed files with 90 additions and 1 deletions
46
src/apis/dicebear.py
Normal file
46
src/apis/dicebear.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
from enum import Enum
|
||||
|
||||
|
||||
class Style(Enum):
|
||||
Adventurer = "adventurer"
|
||||
AdventurerNeutral = "adventurer-neutral"
|
||||
Avataaars = "avataaars"
|
||||
AvataaarsNeutral = "avataaars-neutral"
|
||||
BigEars = "big-ears"
|
||||
BigEarsNeutral = "big-ears-neutral"
|
||||
BigSmile = "big-smile"
|
||||
Bottts = "bottts"
|
||||
BotttsNeutral = "bottts-neutral"
|
||||
Croodles = "croodles"
|
||||
CroodlesNeutral = "croodles-neutral"
|
||||
Dylan = "dylan"
|
||||
FunEmoji = "fun-emoji"
|
||||
Glass = "glass"
|
||||
Icons = "icons"
|
||||
Identicon = "identicon"
|
||||
Initials = "initials"
|
||||
Lorelei = "lorelei"
|
||||
LoreleiNeutral = "lorelei-neutral"
|
||||
Micah = "micah"
|
||||
Miniavs = "miniavs"
|
||||
Notionists = "notionists"
|
||||
NotionistsNeutral = "notionists-neutral"
|
||||
OpenPeeps = "open-peeps"
|
||||
Personas = "personas"
|
||||
PixelArt = "pixel-art"
|
||||
PixelArtNeutral = "pixel-art-neutral"
|
||||
Rings = "rings"
|
||||
Shapes = "shapes"
|
||||
Thumbs = "thumbs"
|
||||
|
||||
|
||||
ALL_STYLES = [style.value for style in Style]
|
||||
|
||||
|
||||
def get_avatar_url(style: Style, seed: str, **kwargs) -> str:
|
||||
url = f"https://api.dicebear.com/9.x/{style.value}/png?seed={seed}"
|
||||
|
||||
for k, v in kwargs.items():
|
||||
url += f"&{k}={v}"
|
||||
|
||||
return url
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
from discord import app_commands
|
||||
import random
|
||||
import pollinations as ai
|
||||
|
||||
SYSTEM_PROMPT = """
|
||||
44
src/exts/tools/dicebear.py
Normal file
44
src/exts/tools/dicebear.py
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
from discord import app_commands
|
||||
import apis.dicebear as db
|
||||
|
||||
|
||||
async def style_autocomplete(interaction: discord.Interaction, current: str):
|
||||
try:
|
||||
current = current or "" # Ensure current is a string
|
||||
return [
|
||||
app_commands.Choice(name=style, value=style)
|
||||
for style in db.ALL_STYLES
|
||||
if current in style
|
||||
]
|
||||
except Exception as e:
|
||||
print(f"Autocomplete error: {e}")
|
||||
return [] # Return empty list to avoid breaking autocomplete
|
||||
|
||||
|
||||
class Dicebear(commands.GroupCog, name="dicebear"):
|
||||
def __init__(self, bot):
|
||||
super().__init__()
|
||||
self.bot = bot
|
||||
|
||||
@app_commands.command(name="generate", description="Generate an avatar")
|
||||
@app_commands.autocomplete(style=style_autocomplete)
|
||||
async def generate(self, interaction: discord.Interaction, seed: str, style: str):
|
||||
url = db.get_avatar_url(db.Style(style), seed)
|
||||
embed = discord.Embed(title=f"{style} on {seed}:", color=discord.Color.yellow())
|
||||
embed.set_image(url=url)
|
||||
await interaction.response.send_message(embed=embed)
|
||||
|
||||
@app_commands.command(name="get-styles", description="Get all available styles")
|
||||
async def get_styles(self, interaction: discord.Interaction):
|
||||
embed = discord.Embed(
|
||||
title="All available styles:",
|
||||
description="\n".join(db.ALL_STYLES),
|
||||
color=discord.Color.yellow(),
|
||||
)
|
||||
await interaction.response.send_message(embed=embed)
|
||||
|
||||
|
||||
async def setup(bot: commands.Bot):
|
||||
await bot.add_cog(Dicebear(bot))
|
||||
Loading…
Add table
Add a link
Reference in a new issue