【问题标题】:Discord Bot that Plays an Audio File When Someone Joins有人加入时播放音频文件的 Discord Bot
【发布时间】:2026-01-30 18:50:01
【问题描述】:

我希望机器人在有人加入时加入语音频道,然后播放声音文件。

到目前为止,我已经让机器人加入语音频道,但它只是不播放声音,也没有显示错误,所以我真的不知道出了什么问题。

const Discord = require('discord.js');
const bot = new Discord.Client();
bot.login('BOT TOKEN');

bot.on('voiceStateUpdate', (oldMember, newMember) => {
  let newUserChannel = newMember.voiceChannel
  let oldUserChannel = oldMember.voiceChannel
  let textChannel = oldMember.guild.channels.get('TEXTCHANNEL ID')

  if(oldUserChannel === undefined && newUserChannel !== undefined) {

    if (newMember.id === 'MEMEBER ID')         //Member 1
    {   
       newUserChannel.join()
       .then(connection => {
          console.log("Joined voice channel!");
          const dispatcher = connection.playFile("C:\Users\NAME\Documents\Welcome_Bot\music\bossman.mp3");

          dispatcher.on("end", end => {newUserChannel.leave()});
       })
        .catch(console.error);

    }
      else if (newMember.id === 'MEMEBER ID')       //Member 2
      {
       textChannel.send('Hello Member 2')
      }
        else if (newMember.id === 'MEMEBER ID')      //Member 3
        {
          textChannel.send('Hello Member 3')
        }
           else                                      //Random
           {
             textChannel.send("Hello") 
           } 
  } 
});

【问题讨论】:

  • 我怀疑您的音频链接。它应该是类似“http://....*.mp3”的东西吗?否则网络将无法理解您的本地路径
  • @ducmai 要播放本地文件,当前设置很好。 Discord.js docs example 使用类似于上面代码的绝对路径。
  • 你的用户名真的是NAME吗?这就是你的道路。如果没有,这就是为什么没有播放的原因。
  • @slothiful 我只是将占位符放入问题中
  • 您可以更新到 d.js v12(master),它具有完整的语音重写,但 al sso 带来了重大变化,npm i discordjs/discord.js 获得 v12

标签: javascript discord discord.js


【解决方案1】:

我相信您的问题是,在您致电调度员之前,机器人实际上并未加入频道。在您致电调度员之前,需要告知机器人进入频道。有一段时间没有处理音频了,但我相信您的调度员正上方的connection.join() 会起作用。您可能需要.then() 以确保它不会在机器人加入频道之前初始化调度程序。

【讨论】: