javascript - 使用嵌入返回消息
问题描述
我正在尝试使用 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)
解决方案
就像所述错误一样,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);
},
};
推荐阅读
- javascript - 无法从子组件更新状态
- python-3.x - 在定义的外部和内部初始化全局变量
- php - 替换尚未替换的字符串
- python - 使用 Python C API,如何找到 Union_Type?
- angular - ANGULAR - 如何在聊天框的另一侧对齐连续消息?
- flutter - Flutter使用listen和StreamBuilder订阅同一个流,得到不同的结果
- python - 面向未来的代码升级。发生错误时避免退出函数
- hadoop - 在 pentaho 工具上运行 hive 查询或从 hive 获取表时发生方法不受支持的错误
- javascript - CodeWars Kata 解决方案中的疑似舍入错误
- javascript - Shepherd AdvanceOn 与淘汰赛点击数据绑定