首页 > 解决方案 > 使用嵌入返回消息

问题描述

我正在尝试使用 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\Egence\calculate.js:18:35)初始化之前无法访问“嵌入” 。(C:\Users* \Desktop\Codding* \index.js:74:25) 在 Client.emit (node:events:390:22)

标签: javascriptdiscord.js

解决方案


就像所述错误一样,embed在初始化之前调用了。这很可能是编码混乱的结果。return我建议您先声明第一个对象embed,然后为其分配一个变量,然后再将return message.channel.send(embed);.

前 - 原始代码:

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);
    },
};

推荐阅读