使用嵌入返回消息

时间:2021-04-30 15:13:23

标签: javascript discord.js

我正在尝试使用 embed 编写返回码,但它总是出现错误。
我是这些 JavaScript 方面的新手,需要帮助。

这是我的代码:

const math = require("mathjs");

const Discord = require("discord.js");

module.exports = {
  name: "Hesap Makinesi",
  aliases: ["hesapla", "hm"],
  description: "Hesaplama yapar (matematik)",

  async run(client, message, args) {
    const roleColor =
      message.guild.me.displayHexColor === "#000000"
        ? "#ffffff"
        : message.guild.me.displayHexColor;

    if (!args[0])
      return (embed = new Discord.MessageEmbed()
        .setTitle("Hesaplanamadı!")
        .setAuthor("HATA BELİRLENDİ!")
        .setThumbnail(
          "https://upload.wikimedia.org/wikipedia/commons/f/f7/Generic_error_message.png"
        )
        .addField(
          `\`?\` Lütfen **geçerli** bir soru giriniz.\n
            \`➥\` **Toplama işlemi için:** " + " işaretini kullanın.\n
            \`➥\` **Çıkarma işlemi için:** " - " işaretini kullanın.\n
            \`➥\` **Çarpma işlemi için:** " * " işaretini kullanın.\n
            \`➥\` **Bölme işlemi için:** " / " işaretini kullanın.
            `
        )
        .setColor(roleColor));

    let resp;

    try {
      resp = math.evaluate(args.join(" "));
    } catch (e) {
      return (embed = new Discord.MessageEmbed()
        .setTitle("Hesaplanamadı!")
        .setAuthor("HATA BELİRLENDİ!")
        .setThumbnail(
          "https://upload.wikimedia.org/wikipedia/commons/f/f7/Generic_error_message.png"
        )
        .addField(
          `\`?\` Lütfen **geçerli** bir soru giriniz.\n
                \`➥\` **Toplama işlemi için:** " + " işaretini kullanın.\n
                \`➥\` **Çıkarma işlemi için:** " - " işaretini kullanın.\n
                \`➥\` **Çarpma işlemi için:** " * " işaretini kullanın.\n
                \`➥\` **Bölme işlemi için:** " / " işaretini kullanın.
                `
        )
        .setColor(roleColor));
    }

    const embed = new Discord.MessageEmbed()
      .setTitle("Hesaplandı!")
      .setAuthor("Hesap Makinesi")
      .setThumbnail(
        "https://upload.wikimedia.org/wikipedia/tr/thumb/8/85/Apple_Hesap_makinesi_Calculator-icon.png/240px-Apple_Hesap_makinesi_Calculator-icon.png"
      )
      .addField("Soru", `\`\`\`css\n${args.join(" ")}\`\`\``)
      .addField("Cevap", `\`\`\`css\n${resp}\`\`\``)
      .setColor(roleColor);

    message.channel.send(embed);
  },
};

这是我的错误:

<块引用>

ReferenceError: 初始化前无法访问“嵌入” 在 Object.run (C:\Users*\Desktop\Codding*\commands\Eglence\calculate.js:18:35) 在客户端。 (C:\Users*\Desktop\Codding*\index.js:74:25) 在 Client.emit (node:events:390:22)

1 个答案:

答案 0 :(得分:0)

如错误所述,embed 在初始化之前被调用。这很可能是编码混乱的结果。与其简单地在 return 语句中塞入一个对象,我建议您先声明 embed,为其分配一个变量,然后是 return message.channel.send(embed);

Ex - 原始代码:

if (!args[0])
    return (embed = new Discord.MessageEmbed()
        .setTitle("Hesaplanamadı!")
        .setAuthor("HATA BELİRLENDİ!")
        .setThumbnail(
            "https://upload.wikimedia.org/wikipedia/commons/f/f7/Generic_error_message.png"
        )
        .addField(
            `\`?\` Lütfen **geçerli** bir soru giriniz.\n
            \`➥\` **Toplama işlemi için:** " + " işaretini kullanın.\n
            \`➥\` **Çıkarma işlemi için:** " - " işaretini kullanın.\n
            \`➥\` **Çarpma işlemi için:** " * " işaretini kullanın.\n
            \`➥\` **Bölme işlemi için:** " / " işaretini kullanın.
            `
        )
        .setColor(roleColor));

例如 - 新代码:

//create the embed first
let errorEmbed = new Discord.MessageEmbed()
    .setTitle("Hesaplanamadı!")
    .setAuthor("HATA BELİRLENDİ!")
    .setThumbnail(
        "https://upload.wikimedia.org/wikipedia/commons/f/f7/Generic_error_message.png"
    )
    .addField(
        `\`?\` Lütfen **geçerli** bir soru giriniz.\n
                    \`➥\` **Toplama işlemi için:** " + " işaretini kullanın.\n
                    \`➥\` **Çıkarma işlemi için:** " - " işaretini kullanın.`,
        `\`➥\` **Çarpma işlemi için:** " * " işaretini kullanın.\n
                    \`➥\` **Bölme işlemi için:** " / " işaretini kullanın.
                    `
    )
    .setColor(roleColor);

if (!args[0]) {
    //then simply call it in your if statement
    return message.channel.send(errorEmbed);
}

注意:我将其命名为 errorEmbed,因为我注意到您将根据两个条件发送 embed,并且每次您都再次创建嵌入。因此,我认为如果您只创建一次 errorEmbed 而不是两次可能会更好。


整个代码 - 这只会修复您的嵌入而不是发送问题,这正是您所要求的:

const math = require("math.js");

const Discord = require("discord.js");

module.exports = {
    name: "hm", //Hesap Makinesi
    aliases: ["hesapla", "hm"],
    description: "Hesaplama yapar (matematik)",

    async execute(client, message, args) {
        const roleColor =
            message.guild.me.displayHexColor === "#000000"
                ? "#ffffff"
                : message.guild.me.displayHexColor;

        let errorEmbed = new Discord.MessageEmbed()
            .setTitle("Hesaplanamadı!")
            .setAuthor("HATA BELİRLENDİ!")
            .setThumbnail(
                "https://upload.wikimedia.org/wikipedia/commons/f/f7/Generic_error_message.png"
            )
            .addField(
                `\`?\` Lütfen **geçerli** bir soru giriniz.\n
                    \`➥\` **Toplama işlemi için:** " + " işaretini kullanın.\n
                    \`➥\` **Çıkarma işlemi için:** " - " işaretini kullanın.`,
                `\`➥\` **Çarpma işlemi için:** " * " işaretini kullanın.\n
                    \`➥\` **Bölme işlemi için:** " / " işaretini kullanın.
                    `
            )
            .setColor(roleColor);

        if (!args[0]) {
            return message.channel.send(errorEmbed);
        }

        let resp;

        try {
            resp = math.evaluate(args.join(" "));
        } catch (e) {
            return message.channel.send(errorEmbed);
        }

        const embed = new Discord.MessageEmbed()
            .setTitle("Hesaplandı!")
            .setAuthor("Hesap Makinesi")
            .setThumbnail(
                "https://upload.wikimedia.org/wikipedia/tr/thumb/8/85/Apple_Hesap_makinesi_Calculator-icon.png/240px-Apple_Hesap_makinesi_Calculator-icon.png"
            )
            .addField("Soru", `\`\`\`css\n${args.join(" ")}\`\`\``)
            .addField("Cevap", `\`\`\`css\n${resp}\`\`\``)
            .setColor(roleColor);

        message.channel.send(embed);
    },
};