首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.js音乐机器人不工作(扰动框架)

Discord.js音乐机器人不工作(扰动框架)
EN

Stack Overflow用户
提问于 2022-05-27 12:31:14
回答 2查看 611关注 0票数 1

我正在尝试用discord.js和创建一个不和谐的音乐机器人,代码很好,我没有任何错误,但是一旦我尝试用我的命令("/play歌“)播放音乐,机器人就加入频道并发送嵌入,但是立即声明音乐已经完成,并且永远不会播放它。

这是我的代码:

App.js

代码语言:javascript
复制
const Distube = require("distube")
const { SoundCloudPlugin } = require("@distube/soundcloud")
const { SpotifyPlugin } = require("@distube/spotify")
/* eslint new-cap: ["error", { "properties": false }] */
client.distube = new Distube.default(client, {
    leaveOnEmpty: true,
    emptyCooldown: 30,
    leaveOnFinish: false,
    emitNewSongOnly: true,
    updateYouTubeDL: true,
    nsfw: true,
    youtubeCookie: process.env.ytcookie,
    plugins: [new SoundCloudPlugin(), new SpotifyPlugin()]
})
const status = (queue) => `Volume: \`${queue.volume}%\` | Loop: \`${queue.repeatMode ? queue.repeatMode === 2 ? "All Queue" : "This Song" : "Off"}\` | Autoplay: \`${queue.autoplay ? "On" : "Off"}\` | Filter: \`${queue.filters.join(", ") || "Off"}\``

client.distube
    .on("playSong", (queue, song) => {          //command to play a song
        const embed = new MessageEmbed()
            .setColor("RANDOM")
            .setAuthor("Started Playing", "https://raw.githubusercontent.com/HELLSNAKES/Music-Slash-Bot/main/assets/music.gif")
            .setThumbnail(song.thumbnail)
            .setDescription(`[${song.name}](${song.url})`)
            .addField("**Views:**", song.views.toString(), true)
            .addField("**Like:**", song.likes.toString(), true)
            .addField("**Duration:**", song.formattedDuration.toString(), true)
            .addField("**Status**", status(queue).toString())
            .setFooter(`Requested by ${song.user.username}`, song.user.avatarURL())
            .setTimestamp()
        queue.textChannel.send({ embeds: [embed] })
    })

play.js

代码语言:javascript
复制
module.exports = {
    name: "play",
    description: "Playing music",
    options: [
        {
            name: "query",
            type: 3,
            description: "The song you want to play | Supported url: youtube,soundcloud,spotify",
            required: true
        }
    ],
    timeout: 5000,
    run: async (interaction, client) => {
        const voiceChannel = interaction.member.voice.channel
        const queue = await client.distube.getQueue(interaction)
        const query = interaction.options.get("query").value
        if (!voiceChannel) {
            return interaction.reply({ content: "Please join a voice channel!", ephemeral: true })
        }
        if (queue) {
            if (interaction.member.guild.me.voice.channelId !== interaction.member.voice.channelId) {
                return interaction.reply({ content: "You are not on the same voice channel as me!", ephemeral: true })
            }
        }
        await interaction.reply("**Searching and attempting...**")
        await interaction.editReply("Searching done :ok_hand: ")
        client.distube.play(voiceChannel, query, { //Should play the song
            textChannel: interaction.channel,
            member: interaction.member
        })
    }
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-07 16:28:43

这是一个问题,这是由于在调用一首歌到如果切换leaveOnFinish时实际上开始播放它之间的延迟。可以通过将leaveOnFinish设置为false,然后在队列结束后稍等以断开bot来修复该问题。这是我如何设置我的机器人离开2分钟后,最后一首歌是播放。

代码语言:javascript
复制
      setTimeout(async () => {
        if (!queue.textChannel.guild.me.voice.channelId) {
          return clearTimeout();
        }
        let queue_music = await client.distube.getQueue(queue.voiceChannel);

        if (queue_music !== undefined && queue_music.playing) {
          clearTimeout();
        } else if (queue_music == undefined || queue_music.songs.length === 0) {
          queue.textChannel
            .send({
              embeds: [
                new MessageEmbed()
                  .setDescription("Finished!")
              ],
            })
            .catch(() => { })
          queue.stop(client.voice.channel)
        }
      }, 120000)
票数 1
EN

Stack Overflow用户

发布于 2022-06-08 13:46:26

我自己也遇到过这个问题,但我无法解决,一些youtube链接存储了错误的数据,distube无法处理它。试着播放其他视频,看看他们是否有这个问题。还可以尝试在distube中提供ytcookie。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72405502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档