无法识别 Node-gd 的复制功能



我继承了一个Discord机器人,它使用node-gd来制作带有用户输入数据的横幅。制作横幅时,我使用.copy函数将图像放置在基本图像的顶部。但是,当我运行代码时,它会抛出一个错误,指出它不是一个函数。

以下是相关代码(user.input是一个数字1-5,默认情况下是?(:

if (user.input != '?') {
imgTemp = gd.createFromPng(`./img/INPUT_${user.input}.png`);
imgTemp.copy(img, 213, 60, 0, 0, 37, 17);
}

这是错误:

> /home/discordbots/Desktop/bots/splatoonBot/splatBot2.js:676
>             imgTemp.copy(img, 213, 60, 0, 0, 37, 17);
>                     ^ TypeError: imgTemp.copy is not a function
>     at generateBanner (/home/discordbots/Desktop/bots/splatoonBot/splatBot2.js:676:21)
>     at Client.<anonymous> (/home/discordbots/Desktop/bots/splatoonBot/splatBot2.js:894:25)
>     at Client.emit (events.js:315:20)
>     at MessageCreateAction.handle (/home/discordbots/Desktop/bots/splatoonBot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
>     at Object.module.exports [as MESSAGE_CREATE] (/home/discordbots/Desktop/bots/splatoonBot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
>     at WebSocketManager.handlePacket (/home/discordbots/Desktop/bots/splatoonBot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
>     at WebSocketShard.onPacket (/home/discordbots/Desktop/bots/splatoonBot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
>     at WebSocketShard.onMessage (/home/discordbots/Desktop/bots/splatoonBot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
>     at WebSocket.onMessage (/home/discordbots/Desktop/bots/splatoonBot/node_modules/ws/lib/event-target.js:125:16)
>     at WebSocket.emit (events.js:315:20)

这是因为gd.createFromPng返回一个承诺。它不是包含方法copy的类。您可以在 node-gd 文档中阅读有关此内容的更多信息。

所以本质上:

if (user.input != '?') {
// the "await" keyword lets you grab the actual value from the promise
let imgTemp = await gd.createFromPng(`./img/INPUT_${user.input}.png`);
// You can then implement the copy method on this newly returned value
imgTemp.copy(img, 213, 60, 0, 0, 37, 17);
}

希望这可以解决您的问题。

最新更新