Typescript 您如何在运行命令时为每种可能的颜色(1600万种)获取一组图像以显示一个?
所以我有一个机器人的颜色命令。用户将为args[0]发送一个十六进制值,而bot当前发送一个MessageEmbed,其中.setColor()为args[0]。这个太小了,我不喜欢。我希望它是那种颜色的完整图像。这是我的彩色代码。ts:Typescript 您如何在运行命令时为每种可能的颜色(1600万种)获取一组图像以显示一个?,typescript,discord.js,Typescript,Discord.js,所以我有一个机器人的颜色命令。用户将为args[0]发送一个十六进制值,而bot当前发送一个MessageEmbed,其中.setColor()为args[0]。这个太小了,我不喜欢。我希望它是那种颜色的完整图像。这是我的彩色代码。ts: import { Message, MessageEmbed } from "discord.js"; export const name = "colour"; export const aliases = [ &q
import { Message, MessageEmbed } from "discord.js";
export const name = "colour";
export const aliases = [ "color" ];
export function execute(message: Message, args: string[]) {
const embed = new MessageEmbed();
try {
embed.setColor(args[0].toUpperCase());
} catch {
return message.channel.send("Invalid color!");
}
message.channel.send(embed);
}
我想删除嵌入,而不是发送一个URL到一个网站与一堆彩色图像。有人知道任何站点/没有站点我怎么能做到这一点吗?我们可以使用 这里有一个函数,它接受您的颜色以及宽度和高度,并返回一个纯色HTML画布元素。我们利用颜色填充图像
const createColorImage = (hex: string, width: number, height: number): HTMLCanvasElement => {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
if (ctx) {
ctx.fillStyle = hex;
ctx.fillRect(0, 0, width, height);
}
return canvas;
}
我不确定发布到discord API需要什么格式,但canvas有许多方法,包括和,您可以使用这些方法来转换它
编辑:
我不确定discord是否接受数据URL,但请尝试以下方法:
const attachColorImage = (message: Message, hex: string, width: number, height: number) => {
const embed = new MessageEmbed({
image: {
url: createColorImage(hex, width, height).toDataURL(),
width,
height
}
})
message.channel.send(embed);
}
另外,请不要从typescript更改它,此代码是直接用typescript编写的,而不是JavaScript。我不确定我是否100%理解--是否要创建纯色图像?与
canvas
类似吗?我可以写下来作为回答。@Lindapaste是的,这就是我想要的
const attachColorImage = (message: Message, hex: string, width: number, height: number) => {
const embed = new MessageEmbed({
image: {
url: createColorImage(hex, width, height).toDataURL(),
width,
height
}
})
message.channel.send(embed);
}