【问题标题】:SyntaxError: await is only valid in async functions and the top level bodies of modules [duplicate]SyntaxError:等待仅在异步函数和模块的顶层主体中有效[重复]
【发布时间】:2022-01-17 01:13:11
【问题描述】:

我有一个小问题。我的“等待画布”不起作用。 我使用 Discord.js v13.x 和 Canvas 来创建图像到斜线命令。

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

代码:

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.`);
             }
             });
           }


         });

     };

第 55 行错误 (const background0 = await Canvas.loadImage('cards/card.png');)

就是这样,虽然我已经在这个平台上尝试了各种主题。没有适合我的真正答案,所以我在这里发布了这个,看看是否有人可以帮助我。

谢谢你

【问题讨论】:

  • 所以添加 .then(async function() {}) 然后阻止
  • 您正在使用axios(config) .then(function (response) { console.log("API COD: OK"); 创建一个新上下文,因此在function 之前包含async

标签: javascript discord.js


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2021-08-13
    • 2019-07-15
    • 2022-06-22
    • 2022-12-18
    • 2021-01-14
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多