我執行完
node discord1.js
後,他給我下列的回應
node:internal/modules/cjs/loader:944
throw err;
^
Error: Cannot find module '/Users/Albert/discord1.js'
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:941:15)
at Function.Module._load (node:internal/modules/cjs/loader:774:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
at node:internal/main/run_main_module:17:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
我的程式是discord音樂機器人的,採用
一顆藍莓的音樂機器人範本
我是用mac執行
用visual studio code編寫程式
請問我哪裡出錯了?
這裡是我的discord1.js的程式碼
const { Client } = require('discord.js');
const ytdl = require('ytdl-core');
const { token } = require('./token.json');
const { prefix } = require('./config.json');
const client = new Client();
// 建立一個類別來管理 Property 及 Method
class Music {
constructor() {
this.isPlaying = false;
this.queue = {};
this.connection = {};
this.dispatcher = {};
}
async join(msg) {
// Bot 加入語音頻道
this.connection[msg.guild.id] = await msg.member.voice.channel.join();
}
async play(msg) {
// 語音群的 ID
const guildID = msg.guild.id;
// 如果 Bot 還沒加入該語音群的語音頻道
if (!this.connection[guildID]) {
msg.channel.send('請先加入頻道');
return;
}
// 處理字串,將 !!play 字串拿掉,只留下 YouTube 網址
const musicURL = msg.content.replace(`${prefix}play`, '').trim();
try {
// 取得 YouTube 影片資訊
const res = await ytdl.getInfo(musicURL);
const info = res.videoDetails;
// 將歌曲資訊加入隊列
if (!this.queue[guildID]) {
this.queue[guildID] = [];
}
this.queue[guildID].push({
name: info.title,
url: musicURL
});
// 如果目前正在播放歌曲就加入隊列,反之則播放歌曲
if (this.isPlaying) {
msg.channel.send(`歌曲加入隊列:${info.title}`);
} else {
this.isPlaying = true;
this.playMusic(msg, guildID, this.queue[guildID][0]);
}
} catch(e) {
console.log(e);
}
}
playMusic(msg, guildID, musicInfo) {
// 提示播放音樂
msg.channel.send(`播放音樂:${musicInfo.name}`);
// 播放音樂
this.dispatcher[guildID] = this.connection[guildID].play(ytdl(musicInfo.url, { filter: 'audioonly' }));
// 把音量降 50%,不然第一次容易被機器人的音量嚇到 QQ
this.dispatcher[guildID].setVolume(0.5);
// 移除 queue 中目前播放的歌曲
this.queue[guildID].shift();
// 歌曲播放結束時的事件
const self = this;
this.dispatcher[guildID].on('finish', () => {
// 如果隊列中有歌曲
if (self.queue[guildID].length > 0) {
self.playMusic(msg, guildID, self.queue[guildID].shift());
} else {
self.isPlaying = false;
msg.channel.send('目前沒有音樂了,請加入音樂 :D');
}
});
}
resume(msg) {
if (this.dispatcher[msg.guild.id]) {
msg.channel.send('恢復播放');
// 恢復播放
this.dispatcher[msg.guild.id].resume();
}
}
pause(msg) {
if (this.dispatcher[msg.guild.id]) {
msg.channel.send('暫停播放');
// 暫停播放
this.dispatcher[msg.guild.id].pause();
}
}
skip(msg) {
if (this.dispatcher[msg.guild.id]) {
msg.channel.send('跳過目前歌曲');
// 跳過歌曲
this.dispatcher[msg.guild.id].end();
}
}
nowQueue(msg) {
// 如果隊列中有歌曲就顯示
if (this.queue[msg.guild.id] && this.queue[msg.guild.id].length > 0) {
// 字串處理,將 Object 組成字串
const queueString = this.queue[msg.guild.id].map((item, index) => `[${index+1}] ${item.name}`).join();
msg.channel.send(queueString);
} else {
msg.channel.send('目前隊列中沒有歌曲');
}
}
leave(msg) {
// 離開頻道
this.connection[msg.guild.id].disconnect();
}
}
const music = new Music();
// 當 Bot 接收到訊息時的事件
client.on('message', async (msg) => {
// 如果發送訊息的地方不是語音群(可能是私人),就 return
if (!msg.guild) return;
// !!join
if (msg.content === `${prefix}join`) {
// 機器人加入語音頻道
music.join(msg);
}
// 如果使用者輸入的內容中包含 !!play
if (msg.content.indexOf(`${prefix}play`) > -1) {
// 如果使用者在語音頻道中
if (msg.member.voice.channel) {
// 播放音樂
await music.play(msg);
} else {
// 如果使用者不在任何一個語音頻道
msg.reply('你必須先加入語音頻道');
}
}
// !!resume
if (msg.content === `${prefix}resume`) {
// 恢復音樂
music.resume(msg);
}
// !!pause
if (msg.content === `${prefix}pause`) {
// 暫停音樂
music.pause(msg);
}
// !!skip
if (msg.content === `${prefix}skip`) {
// 跳過音樂
music.skip(msg);
}
// !!queue
if (msg.content === `${prefix}queue`) {
// 查看隊列
music.nowQueue(msg);
}
// !!leave
if (msg.content === `${prefix}leave`) {
// 機器人離開頻道
music.leave(msg);
}
});
// 連上線時的事件
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.login(token);
請各位大大給我解答,拜託了Orz