-
Notifications
You must be signed in to change notification settings - Fork 1
2. XML Rendering
This is the main way to use 🃏 Qalib. You must have a <discord>
tag that spans the entire document, as it is treated as the root of the ElementTree.
You can then have multiple embeds which are each contained in a <embed>
tag, and must have a key
attribute that uniquely identifies them among the other embed keys, and is written as <embed key="key_name">
.
To render values dynamically, simply put them in between braces, and the renderer will format it when you use the context's rendered_send()
method, as seen in the next section.
It is safe to skip any non-mandatory fields that an embed would not require, they will simply use their default values.
<discord>
<embed key="test_key">
<title>Test Title</title>
<description>Test Description</description>
<type>rich</type>
<colour>magenta</colour>
<timestamp format="%d-%m%-Y">22-04-2023</timestamp>
<url>https://www.discord.com</url>
<fields>
<field>
<name>Test Field</name>
<text>Test Text</text>
</field>
</fields>
<footer>
<text>Test Footer</text>
<icon>https://cdn.discordapp.com/embed/avatars/0.png</icon>
</footer>
<thumbnail>https://cdn.discordapp.com/embed/avatars/0.png</thumbnail>
<image>https://cdn.discordapp.com/embed/avatars/0.png</image>
<author>
<name>{author_name}</name>
<icon>https://cdn.discordapp.com/embed/avatars/0.png</icon>
<url>https://discordapp.com</url>
</author>
</embed>
<embed key="test_key2">
<title>Test</title>
<description>Test Description</description>
<type>rich</type>
<colour>magenta</colour>
<timestamp format="%d-%m%-Y">22-04-2023</timestamp>
<url>https://www.discord.com</url>
<fields>
<field>
<name>Test Field</name>
<text>Test Text</text>
</field>
</fields>
<footer>
<text>Test Footer</text>
<icon>https://cdn.discordapp.com/embed/avatars/0.png</icon>
</footer>
<thumbnail>https://cdn.discordapp.com/embed/avatars/0.png</thumbnail>
<image>https://cdn.discordapp.com/embed/avatars/0.png</image>
<author>
<name>Test Author</name>
<icon>https://cdn.discordapp.com/embed/avatars/0.png</icon>
<url>https://discordapp.com</url>
</author>
</embed>
</discord>
For the purpose of this example, we store this file in templates/test.xml
import discord
from discord.ext import commands
import qalib
bot = commands.AutoShardedBot(command_prefix="!", intents=discord.Intents.all())
@bot.command()
@qalib.embed_manager("templates/test.xml")
async def test(ctx, name: str):
await ctx.rendered_send("test_key", keywords={
"author_name": str
})
The main components are rendered and instantiate the mapped component/item in discord.py. The limit to the number of components/items that you can use in one embed is capped at 25.
For each example we will write how the component should look like. Components/Items should be written in the view section, where the comment is.
<discord>
<embed key="test">
<title>This is a Test!</title>
<colour>cyan</colour>
<fields>
<field>
<name>Test Field</name>
<value>Test Value</value>
</field>
</fields>
<view>
<!--Each component/item should go here-->
</view>
</embed>
</discord>
Rendering a Button in .xml
.
<button>
<label>Click Me!</label>
<style>success</style>
<custom_id>{custom_id}</style>
<disabled>false</disabled>
<url>https://github.com/YousefEZ/discord-qalib</url>
<emoji>
<name>joy</name>
</emoji>
</button>
Rendering a Select in .xml
<select>
<placeholder>Select An Option</placeholder>
<custom_id>{custom_id}</custom_id>
<min_values>1</min_values>
<max_values>3</max_values>
<disabled>false</disabled>
<options>
<option>Amman</option>
<option>Baghdad</option>
<option>Cairo</option>
<option>Damascus</option>
</options>
</select>
🃏 Discord-Qalib 2023