为什么我的机器人发送 3 次“return interaction.reply”[关闭]

问题描述 投票:0回答:2

问题是最后一次交互的按钮代码。回复发送嵌入 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);
}
javascript discord discord.js bots
2个回答
-2
投票

你有一个名为 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 -构造函数


-2
投票

我不知道具体细节,但很明显你得到了 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`),
        ]
© www.soinside.com 2019 - 2024. All rights reserved.