在本文中,我們將討論手動創建一個BOT,以便在不和諧中播放音樂。您可以簡單地複制整個提交的代碼,並為您自己編輯它,如果您擁有JavaScript技巧。 BOT是由我們創建的,但在某些階段,用戶仍然可能面臨不同的問題,因此我們建議您不僅仔細閱讀我們的指示,還可以在屏幕錯誤代碼上出現,如果存在這樣的屏幕錯誤代碼。
事實證明,這種材料對於您或不適合其他原因而言過於復雜,請使用現成的免費機器人播放音樂。下面的鏈接上的文章您將找到有關此內容的詳細信息,您可以實現任務。
閱讀更多:
在discord中向服務器添加音樂機器人
在不和諧中通過機器人播放音樂
第1步:創建新應用程序
丟棄的每個機器人都必須在開發人員的官方門戶網站上註冊。因此,您可以訪問與權限相關的所有必要設置以及機器人的一般行為,可以將鏈接複製到個人服務器中的授權,並使用唯一的令牌,以便進一步開發命令。
轉到Discord Developer Portal的官方網站
- 使用上面的鏈接打開開發人員的Portal的主頁面,登錄Discord個人帳戶,然後單擊“新建應用程序”以創建新的應用程序。
- 輸入他的名字,鑑於唯一性,因為如果有許多具有相同的機器人,則無法創建它 - 通知重命名通知。
- 完成後,打開站點上的菜單,然後選擇“Bot”類別。
- 對面的“Build-A-Bot”字符串單擊“添加機器人”。
- 確認為所選應用程序添加BOT。
- 通過一個熟悉的菜單,轉到«oauth2»。
- 本節負責機器人的一般參數及其授權。在“範圍”塊中,標記“BOT”段落。
- 在權限列表中,請務必激活與語音頻道的連接以及說話的能力,因為它是進一步廣播音樂所必需的。
- 機器人應該能夠讀取和發送消息,因此不要忘記在具有文本聊天權限的部分中啟用這些選項。當然,您可以立即提供所有權限,但這種方法令人難以置信,特別是在您為大眾用戶製作機器人的情況下。
- 只要權限設置完成後,將鏈接複製到服務器上的機器人的第一個授權,因為否則會添加它直到事實證明。
- 按照此鏈接,然後選擇要檢查機器人的測試服務器。
- 確認捕獲並等待有關成功授權的信息。
現在,您有一個具有唯一令牌的機器人,機器人已經添加到服務器上,但在離線模式下。要啟動它,它必須在本地計算機上執行更多的動作,因為我們不卸下滴滴滴定的脫機操作。
第2步:準備行動
準備操作包括創建所需目錄和文件,安裝工具和依賴性。這沒有任何復雜的東西,你只需要依次依靠任何階段的錯誤仔細製作每個動作。
- 創建一個包含機器人名稱的文件夾。您可以選擇任何地方,但用戶的主文件夾最適合此。
- 在其中創建兩個文件:“config.json”和“index.js”。在第一次安裝機器人的整體配置 - 它的前綴和唯一的令牌,並在第二個 - 具有此工具的命令和常用任務的整個程序代碼。
- 對於機器人的工作需要node.js.此工具旨在啟動本地計算機上的腳本。按照下面的鏈接,然後下載其安裝程序for Windows。
從官方網站下載node.js
- 期望下載可執行文件可執行文件,運行它並通過簡單的安裝過程,按照屏幕上顯示的說明。
- 之後,打開“命令行”方便,例如,在“運行”實用程序中輸入cmd(它啟動Win + R鍵組合)。
- 安裝模塊以使用Discord API,該API被稱為“discord.js”。為此,請在打開的控制台窗口中輸入NPM Install Discord.js FFMPEG-二進製文件OPSScript YTDL-Core --SAVE並按Enter鍵 - 所以您立即添加所有必要的依賴項。
- 在成功安裝上等待屏幕上的通知,而無需關閉當前控制台窗口。如果出現錯誤,請學習其代碼並使用搜索引擎在論壇或官方網站上找到工作決定。
因此,用戶的主文件夾應顯示與節點提示組件關聯的文件並在模塊之後添加。重新啟動計算機,以便機器人難以啟動,然後轉到下一步。
第3步:編輯機器人配置文件
您已經知道,在創建的機器人配置文件中,將存在所有負責使用前綴的代碼的一行代碼(在服務器上輸入命令之前的符號)和定義API中的應用程序的唯一令牌。為了履行所有進一步的操作,我們建議使用JS語法支持或之前的任何高級文本編輯器下載程序。下面的鏈接上的文章將能夠熟悉可用的合適解決方案。
閱讀更多:選擇編程開發環境
一旦安裝在計算機上並準備工作,您就可以安全地開始編輯配置文件,在那裡輸入用戶數據。
- 通過文本編輯器或開發環境運行config.js文件,在下面插入代碼。
{
“字首”: ”!”,
“令牌”:“你的toke”
}
將雙引號中的前綴更改為所需或留下感嘆號。使用此標誌的命令的示例如下所示:!播放。
- 轉到開發門戶網站上的機器人,在那裡找到一個獨特的令牌並複制它。
- 插入您的Toke檢查,而不會刪除雙引號。
- 保存更改並關閉此文件。順便說一下,您可以通過標準的“筆記本”執行相同的操作。
在使用配置文件的此操作完成時,不再需要規定單行代碼。關閉它,毫無遺忘為保存所做的編輯,並繼續進一步寫作音樂的機器人。
第4步:試驗起始機器人
首先,我們需要確保機器人通常在服務器上運行並進入在線模式,因此必須將其代碼的主要部分寫入索引.js,然後使用node.js開始。
- 通過開發環境或所選文本編輯器,打開所提到的文件進行編輯。
- 插入負責依賴性安裝的代碼塊,並指示使用的模塊:
const discord =要求('discord.js');
const {
字首,
令牌
} =要求('./ config.json');
const ytdl =要求('ytdl-core');
- 在以前指定的令牌的幫助下,創建客戶端和登錄,通過輸入兩個簡單的線路來執行:
const client = new discord.client();
client.login(令牌);
- 它仍然是指指定聆聽機器人的最後一個基本行。
client.once('準備',()=> {
console.log('準備好!');
});
client.once('重新連接',()=> {
console.log('重新連接!');
});
client.once('disconnect',()=> {
console.log('斷開連接!');
});
- 展開“文件”菜單並保存所做的更改。
- 以方便的方式再次運行控制台。
- 輸入節點index.js命令以啟動機器人腳本。
- 如果其文件未位於用戶的主目錄中,則在節點必須指定完整的位置之後。
- 似乎題字“準備好了”,指示機器人的成功發布。
- 開放不和諧並確保機器人進入“在線”的狀態。
第5步:用音樂機器機組的主編碼器寫作
最複雜的過程仍然是 - 寫作音樂機器人的基本代碼。有一個任務列表必須執行:讀取消息和處理命令,歌曲名稱或其地址的定義,連接到語音通道和播放。所有此機器人的權限是,因此您只需要使用JavaScript函數指定操作,該函數在同一“index.js”文件中執行。
添加一個簡單的功能來讀取消息:
client.on('message',async message => {
}
它僅由兩行組成,但將允許BOT獲取自定義查詢並正確處理。可以說這是任何類型的機器人最重要的球隊之一。請務必通過輸入添加來自其他機器人的忽略消息
如果(message.author.bot)返回;
這避免了同時在服務器上使用多個機器人的衝突。接下來,有必要檢查前綴,以便機器人接受團隊或返回它。
如果(!message.content.startswith(prefix))返回;
檢查啟動命令是使用簡單的IF運算符進行的,以及我們案例中的設計如下所示:
const serverqueue = queue.get(message.guild.id);
if(message.content.startswith(`$ {prefix} play`)){
執行(消息,serverqueue);
返回;
}否則if(message.content.startswith(`$ {prefix} skip`){
跳過(消息,serverqueue);
返回;
}否則if(message.content.startswith(`$ {prefix} stop`){
停止(消息,serverqueue);
返回;
} 別的 {
Message.Channel.send('您必須使用現有命令!')
}
請注意,如果突然進入非工作命令,則發送('')函數將消息發送給用戶。您可以編輯此消息,更改引號中的銘文。
現在,BOT學會了拍攝命令,但直到它可以與它們交互,因為沒有指定操作。首先添加播放命令,該命令負責播放。因為它,需要一個陣列,以下列形式:
const queue = new map();
他在隊列中發送所有命令,並使歌曲僅在前一個結束時播放。接下來,有必要創建一個函數,該功能將檢查用戶是否連接到語音信道以及機器人是否是相應的權限。
async函數執行(消息,serverqueue){
const args = message.Content.split('');
const voicechannel = message.member.voiceChannel;
如果(!VoiceChannel)返回Message.Channel.send('要收聽音樂,您需要在語音通道中!');
const權限= VoiceChannel.permissions for(message.Client.User);
if(!permissions.has('connect')||!permissions.has('說')){
返回message.Channel.Send('我需要許可證加入並說出您的語音通道!');
}
}
下一步操作 - 連接YTDL庫,因為此機器人將讀取來自YouTube的鏈接上的歌曲的名稱,之後將在服務器上播放。它需要插入一小塊代碼插入。
const songinfo = await ytdl.getinfo(args [1]);
const song = {
標題:songinfo.title,
網址:songinfo.video_url,
};
下一個代碼塊將允許您了解隊列中有歌曲,也可以立即連接到語音通道並開始播放。
if(!serverqueue){
} 別的 {
serverqueue.songs.push(歌曲);
console.log(serverqueue.songs);
返回message.Channel.send(`$ {song.title}已添加到隊列中!`);
}
接下來對新手程序員進行一點複雜,這是一個合同方案,它將歌曲添加到數組中,每次輸入時都會發生同樣的事情!播放,檢查隊列並選擇合適的操作。注意提出的評論,允許您處理所有微妙之處。
//為隊列創建合同
const queuecontruct = {
TextChannel:Message.Channel,
VoiceChannel:VoiceChannel,
連接:null,
歌曲:[],
卷:5,
玩:真實,
};
//使用我們的合同設置隊列
queue.set(message.guild.id,queuecontruct);
//將組合插入我們的歌曲數組
queuecontruct.songs.push(歌曲);
嘗試 {
//在這裡我們正在嘗試加入語音聊天並保存對像中的連接
var connection = awaitvoicechannel.join();
queuecontrutuct.connection =連接;
//調用播放函數啟動歌曲
播放(message.uild,queuecontruct.songs [0]);
抓住(錯誤){
//如果機器人無法加入語音聊天,則顯示錯誤消息
console.log(錯誤);
queue.delete(message.guild.id);
返回message.Channel.send(錯誤);
}
通過隊列,一切都很清楚,但仍然沒有播放歌曲,因為沒有分配播放功能。要在代碼中執行此操作,必須添加結構
功能播放(公會,歌曲){
const serverqueue = queue.get(guild.id);
如果(!歌曲){
serverqueue.voiceechannel.leave();
queue.delete(Guild.id);
返回;
}
}
使用playstream()函數和指定鏈接到軌道的播放開始。
const dispatcher = serverqueue.connection.playstream(ytdl(song.url))
.on('結束',()=> {
console.log('音樂結束!');
//從隊列中刪除完成的歌曲
serverqueue.songs.shift();
//再次導致播放功能與以下歌曲
播放(公會,serverqueue.songs [0]);
})
.on('錯誤',錯誤=> {
console.error(錯誤);
});
Dispatcher.setvolumelogarithmic(serverqueue.volume / 5);
例如,如果要添加歌曲跳過功能,例如,當您決定播放播放列表時,請首先要處理相應的命令,然後添加此類片段:
函數跳過(消息,serverqueue){
if(!message.member.voiceeChannel)返回message.Channel.send('您應該在語音通道中停止音樂!');
if(!serverqueue)返回message.Channel.send('沒有歌曲,我可以跳過!');
serverqueue.connection.dispatcher.end();
}
大致相同的方案也有效地工作,但與代碼的塊獲取略有不同的外觀:
功能停止(消息,serverqueue){
如果(!message.member.voiceeChannel)返回message.Channel.send('
你必須在語音通道中停止音樂!');
serverqueue.songs = [];
serverqueue.connection.dispatcher.end();
}
考慮上面提出的信息專門適用於已經熟悉JavaScript語言的用戶或僅參與學習並決定創建音樂機器人。如果您不擁有一般的技能以及使用代碼的指定塊根本沒有說出任何內容,只需將整個源代碼插入文件中,將消息從機器人替換為俄語(它們是引號)並保存變化。所有源代碼都有這種方式:
const discord =要求('discord.js');
const {
字首,
令牌
} =要求('./ config.json');
const ytdl =要求('ytdl-core');
const client = new discord.client();
const queue = new map();
client.once('準備',()=> {
console.log('準備好!');
});
client.once('重新連接',()=> {
console.log('重新連接!');
});
client.once('disconnect',()=> {
console.log('斷開連接!');
});
client.on('message',async message => {
如果(message.author.bot)返回;
如果(!message.content.startswith(prefix))返回;
const serverqueue = queue.get(message.guild.id);
if(message.content.startswith(`$ {prefix} play`)){
執行(消息,serverqueue);
返回;
}否則if(message.content.startswith(`$ {prefix} skip`){
跳過(消息,serverqueue);
返回;
}否則if(message.content.startswith(`$ {prefix} stop`){
停止(消息,serverqueue);
返回;
} 別的 {
Message.Channel.send('您需要輸入有效命令!')
}
});
async函數執行(消息,serverqueue){
const args = message.Content.split('');
const voicechannel = message.member.voiceChannel;
if(!VoiceChannel)返回Message.Channel.Send('您需要在語音通道中播放音樂!');
const權限= VoiceChannel.permissions for(message.Client.User);
if(!permissions.has('connect')||!permissions.has('說')){
返回message.Channel.send('我需要在語音通道中加入和說話的權限!');
}
const songinfo = await ytdl.getinfo(args [1]);
const song = {
標題:songinfo.title,
網址:songinfo.video_url,
};
if(!serverqueue){
const queuecontruct = {
TextChannel:Message.Channel,
VoiceChannel:VoiceChannel,
連接:null,
歌曲:[],
卷:5,
玩:真實,
};
queue.set(message.guild.id,queuecontruct);
queuecontruct.songs.push(歌曲);
嘗試 {
var connection = awaitvoicechannel.join();
queuecontrutuct.connection =連接;
播放(message.uild,queuecontruct.songs [0]);
抓住(錯誤){
console.log(錯誤);
queue.delete(message.guild.id);
返回message.Channel.send(錯誤);
}
} 別的 {
serverqueue.songs.push(歌曲);
console.log(serverqueue.songs);
返回message.Channel.send(`$ {song.title}已添加到隊列中!`);
}
}
函數跳過(消息,serverqueue){
如果(!message.member.voiceeChannel)返回message.channel.send('你必須在語音通道中停止音樂!');
if(!serverqueue)返回message.Channel.send('沒有歌曲,我可以跳過!');
serverqueue.connection.dispatcher.end();
}
功能停止(消息,serverqueue){
如果(!message.member.voiceeChannel)返回message.channel.send('你必須在語音通道中停止音樂!');
serverqueue.songs = [];
serverqueue.connection.dispatcher.end();
}
功能播放(公會,歌曲){
const serverqueue = queue.get(guild.id);
如果(!歌曲){
serverqueue.voiceechannel.leave();
queue.delete(Guild.id);
返回;
}
const dispatcher = serverqueue.connection.playstream(ytdl(song.url))
.on('結束',()=> {
console.log('音樂結束!');
serverqueue.songs.shift();
播放(公會,serverqueue.songs [0]);
})
.on('錯誤',錯誤=> {
console.error(錯誤);
});
Dispatcher.setvolumelogarithmic(serverqueue.volume / 5);
}
client.login(令牌);
完成後,最好重新啟動機器人,之後可以轉到服務器,連接到語音通道並輸入交互的任何命令,檢查如何對機器人反應。
如果BOT的上述變體不適合您,您可以在同一GitHub上找到源代碼並將其複製到您的計算機上。註冊和發射原理保持不變,因此如有必要,只需編輯完成的代碼,然後繼續測試機器人。
在本文中,我們不會影響託管時的機器人的放電,在其他用戶中分發它,創建化身和使用開放站點,從它可以授權。所有這些都是單獨的進程,只有在您磨練您的技能時才應從創建機器人,並準備在網絡上分發項目。