i have a little problem. My "await canvas" didn't work. I use Discord.js v13.x and Canvas for create image to slash command.
SyntaxError: await is only valid in async functions and the top level bodies of modules
Code:
const ms = require('ms');
const messages = require("../utils/messages");
const db = require('../index.js');
const axios = require('axios');
const Canvas = require('canvas');
module.exports = {
//module.exports = {
description: 'Affiche vos statistiques',
//async function run(client, interaction, Canvas) {
//}
options: [
{
name: 'pseudo',
description: 'Pseudo PSN/Xbox/Battle',
type: 'STRING',
required: false
}
],
run: (async function(client, interaction, Canvas) {
Canvas.registerFont('DevTime_Sans.ttf', { family: 'DevTime_Sans' })
Canvas.registerFont('DevTimeSans-Bold_2.ttf', { family: 'DevTime_Sans2' })
const pseudo = interaction.options.getString('pseudo');
if(pseudo){
db.query(`SELECT * FROM links WHERE username = "${pseudo}" ORDER BY id DESC`, function (err_link, links) {
if (err_link) throw err_link;
if(links.length == 1){
const platform1 = links[0].platform;
const platform = platform1.toLowerCase();
var config = {
method: 'get',
url: 'https://api.tracker.gg/api/v2/warzone/standard/profile/'+platform+'/'+links[0].username+'?',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
'Host': '',
'Accept-Encoding': 'gzip',
'Connection': '',
'Accept': 'application/json',
'Cookie': 'X-Mapping-Server=s13; __cflb=02DiuFQAkRrzD1P1mdkJhfdTc9AmTWwYjaaUsXs8Dogtk'
}
};
axios(config)
.then(function (response) {
console.log("API COD: OK");
//IMAGE
const canvas = Canvas.createCanvas(3840, 2160);
const ctx = canvas.getContext('2d');
const background0 = await Canvas.loadImage('cards/card.png');
ctx.drawImage(background0, 0, 0, canvas.width, canvas.height);
//ctx.strokeStyle = '#1c1d25';
ctx.strokeRect(0, 0, canvas.width, canvas.height);
ctx.font = '56px DevTime_Sans';
ctx.fillStyle = '#ffffff';
ctx.textAlign = "start";
ctx.fillText(`${links[0].username}`, 381, 111);
if(platform == "psn"){
ctx.font = '56px DevTime_Sans';
ctx.fillStyle = '#ffffff';
ctx.textAlign = "start";
ctx.fillText(`PlayStation`, 392, 111);
}
if(platform == "xbl"){
ctx.font = '56px DevTime_Sans';
ctx.fillStyle = '#ffffff';
ctx.textAlign = "start";
ctx.fillText(`Xbox`, 392, 111);
}
if(platform == "battle"){
ctx.font = '56px DevTime_Sans';
ctx.fillStyle = '#ffffff';
ctx.textAlign = "start";
ctx.fillText(`Battle.net`, 392, 111);
}
ctx.font = '110px DevTime_Sans';
ctx.fillStyle = '#ffffff';
ctx.textAlign = "start";
ctx.fillText(`${response.data.data.segments[0].stats.wins.value}`, 167, 751);
let x = 140;
let y = 47;
let width = 200;
let height = 200;
let radius = 25;
ctx.beginPath();
ctx.moveTo(x + radius, y);
ctx.lineTo(x + width - radius, y);
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
ctx.lineTo(x + width, y + height - radius);
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
ctx.lineTo(x + radius, y + height);
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
ctx.lineTo(x, y + radius);
ctx.quadraticCurveTo(x, y, x + radius, y);
ctx.closePath();
ctx.clip();
const avatar = await Canvas.loadImage(response.data.data.platformInfo.avatarUrl);
ctx.drawImage(avatar, 44, 60, 299, 299);
const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'stats.png');
console.log(response.data.data.segments[0].stats.wins.displayValue);
interaction.reply({
files: [attachment]
});
//console.log(JSON.stringify(response.data));
})
.catch(function (error) {
interaction.reply({content:`Oups... Le compte ${links[0].username} est privé. Allez sur votre compte Call of Duty pour mettre votre compte en public.`});
});
}else{
interaction.reply({content:`Oups... Le compte ${links[0].username} est introuvable.`});
}
});
}else{
// If the member doesn't have enough permissions
//if(!interaction.member.permissions.has('ADMINISTRATOR') && !interaction.member.roles.cache.some((r) => r.name === "Giveaways")){
// return interaction.reply({
// content: ':x: Vous devez disposer des autorisations de gestion des messages pour lancer des concours.',
// ephemeral: true
// });
//}
db.query(`SELECT * FROM links WHERE discord_user = "${interaction.user.id}" ORDER BY id DESC`, function (err_link, links) {
if (err_link) throw err_link;
if(links.length == 1){
const platform1 = links[0].platform;
const platform = platform1.toLowerCase();
var config = {
method: 'get',
url: 'https://api.tracker.gg/api/v2/warzone/standard/profile/'+platform+'/'+links[0].username+'?',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
'Host': '',
'Accept-Encoding': 'gzip',
'Connection': '',
'Accept': 'application/json',
'Cookie': 'X-Mapping-Server=s13; __cflb=02DiuFQAkRrzD1P1mdkJhfdTc9AmTWwYjaaUsXs8Dogtk'
}
};
axios(config)
.then(function (response) {
console.log(response.data.data.segments[0].stats.wins.displayValue);
//interaction.reply({
// files: [attachment]
//});
//console.log(JSON.stringify(response.data));
})
.catch(function (error) {
interaction.reply(`Oups... Le compte ${pseudo} est privé. Allez sur votre compte Call of Duty pour mettre votre compte en public.`);
});
}else{
interaction.reply(`Oups... Vous n'avez pas fait /link.`);
}
});
}
});
};
Error at line: 55 (const background0 = await Canvas.loadImage('cards/card.png');
)
That's it, though I've tried various topics on this platform. With no real answer that fits me, so I posted this here to see if anyone can help me.
Thanks you