简体   繁体   中英

SyntaxError: await is only valid in async functions and the top level bodies of modules

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

Try this:

       .then(async 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');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM