问题是最后一次交互的按钮代码。回复发送嵌入 3 次,而不是像其他交互那样发送一次。回复。如果有 3 个相同的符号,它也会让玩家输
const { SlashCommandBuilder } = require("@discordjs/builders")
const { MessageEmbed } = require("discord.js")
const { User } = require("../utils/schemas")
const { AdminID } = require("../config.json")
const prettyMilliseconds = require('pretty-ms');
module.exports = {
data: new SlashCommandBuilder()
.setName("slot")
.setDescription("Win up to 80x your bet")
.addNumberOption(
option => option
.setName("amount")
.setDescription("Amount to bet")
.setRequired(true)
.setMinValue(10)
)
.addStringOption(
option => option
.setName("game")
.setDescription("Choose a slot game")
.setRequired(true)
.addChoices(
{ name: 'Normal', value: 'Normal' },
{ name: 'Emoji', value: 'Emoji' }
)
),
run: async (interaction) => {
const user = interaction.member.user
let amount = interaction.options.getNumber("amount")
game = interaction.options.getString("game")
userData = await User.findOne({ id: user.id }) || new User({ id: user.id }),
embed = new MessageEmbed({ color: "YELLOW" })
if (userData.wallet < amount) return interaction.reply({
embeds: [ embed.setDescription(`Not enough money on wallet to make a bet`) ],
ephemeral: true
})
if (userData.cooldowns.slot > Date.now()) return interaction.reply({
embeds: [
embed.setDescription(`⌛ Slot is on cooldown, wait for **\`${prettyMilliseconds(userData.cooldowns.slot - Date.now(), { verbose: true, secondsDecimalDigits: 0 })}\`**`)
],
ephemeral: true
})
let LoseSign="none"
let WinSign1="none"
let WinSign2="none"
let WinSign3="none"
let Jackpot="none"
if(game === "Normal") {
LoseSign="J"
WinSign1="A"
WinSign2="K"
WinSign3="Q"
Jackpot="Z"
} else if(game === "Emoji"){
LoseSign="💩"
WinSign1="💸"
WinSign2="🤑"
WinSign3="💰"
Jackpot="🚀"
}
userData.wallet -= amount
let X=Math.floor(Math.random() * 108) + 1;
if (InRange(X, 0, 25)) Slot1=LoseSign
if (InRange(X, 26, 50)) Slot1=WinSign1
if (InRange(X, 51, 75)) Slot1=WinSign2
if (InRange(X, 101, 109)) Slot1=Jackpot
if (InRange(X, 76, 100)) Slot1=WinSign3
X=Math.floor(Math.random() * 108) + 1;
if (InRange(X, 1, 25)) Slot2=LoseSign
if (InRange(X, 25, 50)) Slot2=WinSign1
if (InRange(X, 50, 75)) Slot2=WinSign2
if (InRange(X, 100, 109)) Slot2=Jackpot
if (InRange(X, 75, 100)) Slot2=WinSign3
X=Math.floor(Math.random() * 108) + 1;
if (InRange(X, 1, 25)) Slot3=LoseSign
if (InRange(X, 25, 50)) Slot3=WinSign1
if (InRange(X, 50, 75)) Slot3=WinSign2
if (InRange(X, 100, 109)) Slot3=Jackpot
if (InRange(X, 75, 100)) Slot3=WinSign3
if(Slot1 === LoseSign || Slot2 === LoseSign || Slot3 === LoseSign) {
gameEnd="Lost"
}
if(Slot1 === WinSign1 && Slot2 === WinSign1 && Slot3 === WinSign1) {
gameEnd="Won"
amount=amount*5
} else gameEnd="Lost"
if(Slot1 === WinSign2 && Slot2 === WinSign2 && Slot3 === WinSign2) {
gameEnd="Won"
amount=amount*10
} else gameEnd="Lost"
if(Slot1 === WinSign3 && Slot2 === WinSign3 && Slot3 === WinSign3) {
gameEnd="Won"
amount=amount*14
} else gameEnd="Lost"
if(Slot1 === Jackpot && Slot2 === Jackpot && Slot3 === Jackpot) {
gameEnd="Won"
amount=amount*80
} else gameEnd="Lost"
userData.cooldowns.slot = new Date().setMilliseconds(8000,0,0,0)
if(gameEnd === "Won") {
embed.setColor("GREEN")
userData.wallet += amount
} else embed.setColor("RED")
userData.save()
return interaction.reply({
embeds: [
embed.setThumbnail(user.displayAvatarURL()),
embed.setTitle(`Slot ${game}, game from ${user.username}`),
embed.setDescription(`Slotmachine : ${Slot1}${Slot2}${Slot3}
\n\nYou ${gameEnd} ${amount}🪙
\n\nGame win on 3 same Symbols
\nGame lost always on "${LoseSign}" Symbols
\nWin **5x** on "${WinSign1}" Symbols
\nWin **10x** on "${WinSign2}" Symbols
\nWin **14x** on "${WinSign3}" Symbols
\nWin Jackpot with **80x** on "${Jackpot}" Symbols`)
]
})
}
}
function InRange(number, min, max) {
return Boolean(number >= min && number <= max);
}
你有一个名为 embed 的变量,顾名思义,它包含一个嵌入。在第一个 interaction.reply 中,您使用 .setDescription 方法修改该嵌入,然后将修改后的嵌入发送到 Discord API。
在最后一次交互中。回复,你发送了三次嵌入,只是做了不同的修改,正如西格玛在之前的回答中已经指出的那样。
关键是链接方法,像这样:
embeds: [
embed.setThumbnail(user.displayAvatarURL())
.setTitle(`Slot ${game}, game from ${user.username}`)
.setDescription(`Slotmachine : ${Slot1}${Slot2}${Slot3}
]
MessageEmbed 在 v14 中被重命名为 EmbedBuilder,但您仍然可以查看 Discord.js 指南中的示例:https://discordjs.guide/popular-topics/embeds.html#using-the-embed -构造函数
我不知道具体细节,但很明显你得到了 3 个嵌入,因为你的嵌入列表有 3 个元素,而其他的只有一个。
也许您需要将它们链接起来或类似的东西,同样,这比完整的答案更具洞察力。
编辑:感谢删除我查询的陌生人,我现在倍感困惑。我不知道这些东西是如何工作的,所以我宁愿得到一个答案。
embeds: [
embed.setThumbnail(user.displayAvatarURL())
.setTitle(`Slot ${game}, game from ${user.username}`)
.setDescription(`Slotmachine : ${Slot1}${Slot2}${Slot3}
\n\nYou ${gameEnd} ${amount}🪙
\n\nGame win on 3 same Symbols
\nGame lost always on "${LoseSign}" Symbols
\nWin **3x** on "${WinSign1}" Symbols
\nWin **6x** on "${WinSign2}" Symbols
\nWin **9x** on "${WinSign3}" Symbols
\nWin Jackpot with **16x** on "${Jackpot}" Symbols`),
]