Sa artikulong ito, magsasalita kami tungkol sa manu-manong paglikha ng isang bot para sa paglalaro ng musika sa discord. Maaari mo lamang kopyahin ang buong code na isinumite, at i-edit ito para sa iyong sarili kung nagmamay-ari ka ng mga kasanayan sa JavaScript. Ang bot ay nilikha ng sa amin, ngunit sa ilang mga yugto ang gumagamit ay maaari pa ring harapin ang iba't ibang mga problema, kaya ipaalam namin sa iyo upang maingat na basahin hindi lamang ang aming mga tagubilin, ngunit din lumilitaw sa screen error code kung may mga tulad.
Kung ito ay lumalabas na ang materyal na ito ay masyadong kumplikado para sa iyo o hindi angkop para sa iba pang mga kadahilanan, gamitin ang mga handa na libreng bot upang i-play ang musika. Ang artikulo sa link sa ibaba ay makikita mo ang detalyadong impormasyon tungkol dito at maaari mong ipatupad ang gawain.
Magbasa nang higit pa:
Pagdaragdag ng isang musikal na bot sa server sa discord
Maglaro ng musika sa pamamagitan ng Bot sa Discord.
Hakbang 1: Paglikha ng Bagong Application
Ang bawat bot para sa discard ay dapat na nakarehistro sa opisyal na portal para sa mga developer. Kaya makakakuha ka ng access sa lahat ng mga kinakailangang setting na nauugnay sa mga pahintulot at ang pangkalahatang pag-uugali ng bot, maaari mong kopyahin ang link sa pahintulot nito sa personal na server at gamitin ang natatanging token, na kinakailangan para sa karagdagang pag-unlad ng mga utos.
Pumunta sa opisyal na website ng Discord Developer Portal.
- Gamitin ang link sa itaas upang buksan ang pangunahing pahina ng portal para sa mga developer, mag-log in sa Discord Personal Account at mag-click sa "Bagong Application" upang lumikha ng isang bagong application.
- Ipasok ang kanyang pangalan, bibigyan ang pagiging natatangi, dahil kung maraming mga bot na may parehong pangalan, hindi posible na likhain ito - isang paunawa ng renaming ay maabisuhan.
- Sa pagtatapos, buksan ang menu sa site at piliin ang "Bot" na kategorya.
- Kabaligtaran ang string na "build-a-bot" na string sa "add bot".
- Kumpirmahin ang pagdaragdag ng bot para sa napiling application.
- Sa pamamagitan ng isang pamilyar na menu, pumunta sa «oauth2».
- Ang seksyon na ito ay responsable para sa mga pangkalahatang parameter ng bot at ang awtorisasyon nito. Sa bloke ng "Scopes", markahan ang "bot" na talata.
- Sa listahan ng mga pahintulot, siguraduhin na i-activate ang koneksyon sa mga channel ng boses at ang kakayahang magsalita, dahil ito ay kinakailangan para sa karagdagang pag-broadcast ng musika.
- Ang bot ay dapat na magbasa at magpadala ng mga mensahe, kaya huwag kalimutang paganahin ang mga pagpipiliang ito sa seksyon na may mga pahintulot sa text chat. Siyempre, maaari mong ibigay ang lahat ng mga pahintulot nang sabay-sabay, ngunit ang diskarte na ito ay hindi kapani-paniwala, lalo na sa mga kaso kung saan gumawa ka ng bot para sa isang mass user.
- Sa sandaling makumpleto ang setting ng pahintulot, kopyahin ang link para sa unang awtorisasyon ng bot sa server, dahil kung hindi ito idagdag hanggang ito ay lumiliko.
- Sundin ang link na ito at piliin ang test server kung saan nais mong suriin ang bot.
- Kumpirmahin ang pagkuha at maghintay para sa impormasyon tungkol sa matagumpay na awtorisasyon.
Ngayon mayroon kang isang bot na may isang natatanging token, at ang bot ay naidagdag sa server, ngunit habang nasa offline mode. Upang simulan ito, kailangan itong magsagawa ng ilang mga pagkilos sa lokal na computer, dahil habang hindi namin i-load ang bot bot para sa offline na operasyon.
Hakbang 2: Mga Pagkilos ng Paghahanda
Kabilang sa mga aksyon sa paghahanda ang paglikha ng kinakailangang mga direktoryo at mga file, ang pag-install ng mga tool at dependency para sa kanila. Walang kumplikado sa ito, kailangan mo lamang gawin ang bawat pagkilos, maingat na pagsunod sa mga pagkakamali sa anumang yugto.
- Gumawa ng isang folder na may pangalan ng bot. Maaari kang pumili ng anumang lugar, ngunit ang home folder ng user ay pinakaangkop para dito.
- Lumikha ng dalawang mga file dito: "config.json" at "index.js". Sa unang pag-install ng pangkalahatang configuration ng bot - ang prefix at natatanging token nito, at sa pangalawang - ang buong code ng programa na may mga utos at karaniwang mga gawain ng tool na ito.
- Para sa trabaho ng bot ay kailangan node.js. Ang tool na ito ay dinisenyo upang simulan ang mga script sa lokal na computer. Sundin ang link sa ibaba at i-download ang installer nito para sa Windows.
I-download ang node.js mula sa opisyal na site
- Inaasahan na i-download ang executable file executable, patakbuhin ito at ipasa ang simpleng pamamaraan ng pag-install, pagsunod sa mga tagubilin na ipinapakita sa screen.
- Pagkatapos nito, buksan ang "command line" na maginhawa para sa iyo, halimbawa, pagpasok ng CMD sa "Run" utility (nagsisimula ito sa kumbinasyon ng Win + R key).
- I-install ang module upang gumana sa API ng Discord, na tinatawag na "Discord.js". Upang gawin ito, sa console window na bubukas, ipasok ang NPM install discord.js ffmpeg-binary opsscript ytdl-core --save at pindutin ang enter - kaya agad mong idagdag ang lahat ng mga kinakailangang dependency.
- Maghintay para sa mga abiso sa screen sa isang matagumpay na pag-install, nang hindi isinasara ang kasalukuyang console window. Kung lumitaw ang mga error, matutunan ang kanilang code at gamitin ang search engine upang makahanap ng desisyon sa trabaho sa mga forum o opisyal na website.
Bilang resulta, ang folder ng home ng gumagamit ay dapat lumitaw na mga file na nauugnay sa bahagi ng node.js at idinagdag pagkatapos ng module. I-restart ang computer upang ang bot ay walang kahirapan sa startup, pagkatapos ay pumunta sa susunod na hakbang.
Hakbang 3: Pag-edit ng Bot Configuration File.
Alam mo na sa nilikha na bot configuration file magkakaroon ng lahat ng isang pares ng mga hanay ng code na responsable para sa ginamit na prefix (simbolo bago pumasok sa command sa server) at isang natatanging token na tumutukoy sa application sa API. Upang matupad ang lahat ng karagdagang mga pagkilos, inirerekumenda namin ang pag-download ng isang programa na may suporta sa JS syntax o anumang advanced na editor ng teksto kung hindi pa ito nagawa. Ang artikulo sa link sa ibaba ay magagawa mong gawing pamilyar ang mga magagamit na angkop na solusyon.
Magbasa nang higit pa: Pagpili ng kapaligiran sa pag-unlad para sa programming
Sa sandaling ito ay naka-install sa computer at handa na magtrabaho, maaari mong ligtas na simulan upang i-edit ang configuration file, pagpasok ng data ng user doon.
- Patakbuhin ang file na config.js sa pamamagitan ng isang editor ng teksto o kapaligiran sa pag-unlad, ipasok ang code sa ibaba.
{
"Prefix": "!",
"Token": "your-toke"
}
Baguhin ang prefix sa double quotes sa ninanais o mag-iwan ng tandang pananaw. Ang isang halimbawa ng isang utos na gumagamit ng sign na ito ay ganito ang hitsura nito:! Play.
- Pumunta sa iyong bot sa portal ng pag-unlad, maghanap ng isang natatanging token doon at kopyahin ito.
- Ipasok ang iyong-teke inspeksyon sa halip nang hindi tinatanggal ang double quotes.
- I-save ang mga pagbabago at isara ang file na ito. Sa pamamagitan ng paraan, maaari mong isagawa ang parehong pagkilos sa pamamagitan ng isang karaniwang "notebook".
Sa mga pagkilos na ito na nakumpleto ang configuration file, hindi na kailangan mong magreseta ng isang solong linya ng code. Isara ito, nang hindi nalilimutan na i-save ang mga pag-edit na ginawa, at magpatuloy sa pagsulat ng bot para sa paglalaro ng musika.
Hakbang 4: Pagsisimula ng Pagsisimula Bot.
Una, kailangan nating tiyakin na ang bot ay karaniwang tumatakbo sa server at napupunta sa online mode, kinakailangan upang isulat ang pangunahing bahagi ng code sa index.js, at pagkatapos ay gamitin ang node.js upang magsimula.
- Sa pamamagitan ng kapaligiran ng pag-unlad o ang napiling editor ng teksto, buksan ang nabanggit na file para sa pag-edit.
- Ipasok ang bloke ng code na responsable para sa pag-install ng dependency at nagpapahiwatig ng mga module na ginamit:
Const discord = nangangailangan ('discord.js');
const {
Prefix,
token
} = Nangangailangan ('./ config.json');
const ytdl = nangangailangan ('ytdl-core');
- Sa tulong ng mga naunang tinukoy na mga token, lumikha ng isang kliyente at pag-login, na isinasagawa sa pamamagitan ng pagpasok lamang ng dalawang simpleng linya:
Const client = bagong discord.client ();
Client.login (token);
- Ito ay nananatiling lamang upang tukuyin ang huling pangunahing mga linya para sa pakikinig sa bot.
Client.once ('handa', () => {
Console.log ('handa!');
});
Client.once ('reconnecting', () => {
Console.log ('reconnecting!');
});
Client.once ('idiskonekta', () => {
Console.log ('idiskonekta!');
});
- Palawakin ang menu na "File" at i-save ang mga pagbabagong ginawa.
- Patakbuhin muli ang console sa isang madaling paraan.
- Ipasok ang node index.js command upang simulan ang bot script.
- Kung ang mga file nito ay hindi matatagpuan sa direktoryo ng bahay ng gumagamit, pagkatapos ay kailangang tukuyin ang isang kumpletong hayaan ang mga ito.
- Ang matagumpay na paglunsad ng bot ay ipinahiwatig ng lumitaw na inskripsyon na "handa na!".
- Buksan ang Discord at siguraduhin na ang bot ay napunta sa katayuan ng "online".
Hakbang 5: Pagsulat ng pangunahing tagapagkodigo ng musikal na bot
Ang pinaka-kumplikadong proseso ay nanatili - pagsulat ng pangunahing code para sa musical bot. May isang listahan ng mga gawain na dapat gawin nito: pagbabasa ng mga mensahe at pagproseso ng mga utos, kahulugan ng isang pangalan ng kanta o address nito, pagkonekta sa channel ng boses at pag-playback. Ang mga pahintulot sa lahat ng bot na ito ay, kaya kailangan mo lamang tukuyin ang mga pagkilos gamit ang mga function ng JavaScript, na ginagampanan sa parehong "index.js" na file.
Magdagdag ng isang simpleng tampok upang basahin ang mga mensahe:
Client.on ('mensahe', async message => {
}
Ito ay binubuo ng dalawang linya lamang, ngunit magpapahintulot sa bot na kumuha ng pasadyang query at naproseso nang wasto. Maaari itong sabihin na ito ay isa sa mga pinakamahalagang koponan para sa mga bot ng anumang uri. Tiyaking idagdag ang hindi papansin ang mga mensahe mula sa iba pang mga bot sa pamamagitan ng pagpasok
Kung (message.author.bot) bumalik;
Iniiwasan nito ang mga salungatan habang gumagamit ng maraming bot sa server nang sabay-sabay. Susunod, kinakailangan upang suriin ang prefix upang ang bot ay tinanggap ang koponan o ibinalik ito.
Kung (! mensahe.content.startswith (prefix)) bumalik;
Sinusuri ang mga inilunsad na mga utos gamit ang simple kung ang mga operator, at ang disenyo sa aming kaso ay ganito ang hitsura:
Const serverQueue = queue.get (message.guild.id);
kung (message.content.startswith (`$ {prefix} play`)) {
Execute (mensahe, serverQueue);
Bumalik;
} Else kung (message.content.startswith (`$ {prefix} laktawan`)) {
Laktawan (mensahe, serverQueue);
Bumalik;
} Else kung (message.content.startswith (`$ {prefix} stop`)) {
Itigil (mensahe, serverQueue);
Bumalik;
} Else {
Message.Channel.Send ('Dapat mong gamitin ang umiiral na command!')
}
Mangyaring tandaan na ang pagpapadala ('') function ay nagpapadala ng mensahe sa user kung biglang pumasok ito sa di-gumaganang utos. Ang mensaheng ito ay maaari mong i-edit, palitan ang inskripsyon sa mga quote.
Ngayon ang bot ay natutunan na kumuha ng mga utos, ngunit hanggang makasama ito sa kanila, dahil hindi tinukoy ang mga aksyon. Unang idagdag ang command ng pag-play, na responsable para sa pag-playback. Para sa mga ito, ang isang array ay kinakailangan sa sumusunod na form:
Const queue = bagong mapa ();
Ipinadala niya ang lahat ng mga utos sa queue at ginagawang mga kanta upang i-play lamang kapag ang nakaraang isa ay nagtatapos. Susunod, kinakailangan upang lumikha ng isang function na suriin kung ang user na nakakonekta sa channel ng boses at kung ang bot ay ang kaukulang mga pahintulot.
Async function execute (mensahe, serverQueue) {
const args = message.content.split ('');
Const voicechannel = message.member.voiceChannel;
Kung (! Voicechannel) bumalik message.Channel.Send ('Upang makinig sa musika, kailangan mong maging sa boses channel!');
const Permissions = voicechannel.permissionsfor (message.client.User);
Kung (! Permissions.has ('Connect') ||! Permissions.has ('Magsalita')) {
Bumalik message.Channel.Send ('Kailangan ko ng mga permit na sumali at magsalita ng iyong boses channel!');
}
}
Susunod na pagkilos - Pagkonekta sa library ng YTDL, dahil ang bot na ito ay magbabasa ng pangalan ng kanta sa link mula sa YouTube, pagkatapos nito ay nilalaro sa server. Kakailanganin upang magsingit ng isang maliit na piraso ng code insert.
Const songinfo = naghihintay ytdl.getinfo (args [1]);
Const song = {
Pamagat: songinfo.title,
URL: songinfo.video_url,
};
Ang susunod na bloke ng code ay magbibigay-daan sa iyo upang maunawaan kung may mga kanta sa queue o maaari mong agad na kumonekta sa channel ng boses at simulan ang pag-playback.
Kung (! ServerQueue) {
} Else {
ServerQueue.songs.push (kanta);
Console.log (serverQueue.songs);
Bumalik message.Channel.Send (`$ {song.title} ay idinagdag sa queue!`);
}
Susunod ay isang maliit na kumplikado para sa mga programmer ng baguhan ng isang contract scheme na nagdadagdag ng isang kanta sa isang array at ginagawang pareho sa bawat oras na ipasok mo ang pag-play, pagsuri sa queue at pagpili ng tamang pagkilos. Bigyang-pansin ang mga komento na ipinakita, na nagbibigay-daan sa iyo upang harapin ang lahat ng mga subtleties.
/ / Paglikha ng isang kontrata para sa queue.
Const queuecontruct = {
TextChannel: Message.Channel,
VoiceChannel: VoiceChannel,
Koneksyon: null,
Mga Kanta: [],
Dami: 5,
Nagpe-play: totoo,
};
// set queue sa aming kontrata.
queue.set (message.guild.id, queuecontruct);
/ / Ipasok ang komposisyon sa aming hanay ng mga kanta.
queuecontruct.songs.push (kanta);
subukan {
// Narito sinusubukan naming sumali sa voice chat at i-save ang koneksyon sa bagay
var connection = naghihintay voicechannel.join ();
queuecontruct.connection = koneksyon;
/ / Pagtawag sa pag-andar ng pag-playback upang simulan ang kanta
Maglaro (message.guild, queuecontruct.songs [0]);
} Catch (err) {
/ / Ipakita ang isang mensahe ng error kung ang bot ay hindi maaaring sumali sa voice chat
Console.log (mali);
queue.delete (message.guild.id);
Bumalik message.channel.send (err);
}
Sa queue, ang lahat ay malinaw, ngunit hindi pa rin maglaro ng mga kanta, dahil walang assignment para sa pag-andar ng pag-play. Upang gawin ito sa code na kinakailangan upang magdagdag ng istraktura
Function Play (Guild, Song) {
Const serverQueue = queue.get (guild.id);
Kung (! Song) {
ServerQueue.voiceChannel.leave ();
queue.delete (guild.id);
Bumalik;
}
}
Ang pag-play ay nagsisimula gamit ang pag-andar ng PlayStream () at tinukoy na link sa track.
Const dispatcher = serverqueue.connection.playstream (ytdl (song.url))
.on ('end', () => {
Console.log ('ang musika ay tapos na!');
/ / Tinatanggal ang natapos na kanta mula sa queue.
serverQueue.songs.shift ();
/ muli ay nagiging sanhi ng pag-andar ng pag-playback sa sumusunod na kanta.
Maglaro (guild, serverqueue.songs [0]);
})
.on ('error', error => {
Console.Error (error);
});
dispatcher.etvolumelogarithmic (serverQueue.volume / 5);
Kung nais mong magdagdag ng isang function ng SPEK skip, halimbawa, kapag nagpasya kang maglaro ng isang playlist, unang alagaan ang naaangkop na utos, at pagkatapos ay idagdag ang naturang fragment:
Function skip (mensahe, serverQueue) {
Kung (mensahe.member.voiceChannel) bumalik message.channel.Send ('Dapat kang maging sa isang channel ng boses upang ihinto ang musika!');
Kung (! ServerQueue) bumalik message.Channel.Send ('Walang kanta na maaari kong laktawan!');
ServerQueue.connection.dispatcher.END ();
}
Tinatayang ang parehong pamamaraan ay gumagana din ang stop function, ngunit ang bloke na may code ay nakakuha ng isang bahagyang iba't ibang hitsura:
Function stop (mensahe, serverQueue) {
Kung (! Message.member.voiceChannel) bumalik message.channel.send ('
Dapat kang nasa channel ng boses upang ihinto ang musika! ');
ServerQueue.songs = [];
ServerQueue.connection.dispatcher.END ();
}
Isaalang-alang na ang impormasyong ipinakita sa itaas ay angkop lamang para sa mga gumagamit na pamilyar sa wikang JavaScript o ay nakikibahagi lamang sa pag-aaral at nagpasyang lumikha ng isang musikal na bot. Kung hindi ka nagmamay-ari ng mga kasanayan sa pangkalahatan at ang tinukoy na mga bloke sa code hindi mo sinasabi ang anumang bagay, ipasok lamang ang buong source code sa file, palitan ang mga mensahe mula sa bot sa Russian (sila ay nasa mga quote) at i-save ang mga pagbabago. Ang lahat ng source code ay may ganitong uri:
Const discord = nangangailangan ('discord.js');
const {
Prefix,
token
} = Nangangailangan ('./ config.json');
const ytdl = nangangailangan ('ytdl-core');
Const client = bagong discord.client ();
Const queue = bagong mapa ();
Client.once ('handa', () => {
Console.log ('handa!');
});
Client.once ('reconnecting', () => {
Console.log ('reconnecting!');
});
Client.once ('idiskonekta', () => {
Console.log ('idiskonekta!');
});
Client.on ('mensahe', async message => {
Kung (message.author.bot) bumalik;
Kung (! mensahe.content.startswith (prefix)) bumalik;
Const serverQueue = queue.get (message.guild.id);
kung (message.content.startswith (`$ {prefix} play`)) {
Execute (mensahe, serverQueue);
Bumalik;
} Else kung (message.content.startswith (`$ {prefix} laktawan`)) {
Laktawan (mensahe, serverQueue);
Bumalik;
} Else kung (message.content.startswith (`$ {prefix} stop`)) {
Itigil (mensahe, serverQueue);
Bumalik;
} Else {
Message.Channel.Send ('Kailangan mong magpasok ng wastong utos!')
}
});
Async function execute (mensahe, serverQueue) {
const args = message.content.split ('');
Const voicechannel = message.member.voiceChannel;
Kung (! VoiceChannel) bumalik message.Channel.Send ('Kailangan mong maging sa isang boses channel upang i-play ang musika!');
const Permissions = voicechannel.permissionsfor (message.client.User);
Kung (! Permissions.has ('Connect') ||! Permissions.has ('Magsalita')) {
Bumalik mensahe.Channel.Send ('Kailangan ko ang mga pahintulot na sumali at magsalita sa iyong boses channel!');
}
Const songinfo = naghihintay ytdl.getinfo (args [1]);
Const song = {
Pamagat: songinfo.title,
URL: songinfo.video_url,
};
Kung (! ServerQueue) {
Const queuecontruct = {
TextChannel: Message.Channel,
VoiceChannel: VoiceChannel,
Koneksyon: null,
Mga Kanta: [],
Dami: 5,
Nagpe-play: totoo,
};
queue.set (message.guild.id, queuecontruct);
queuecontruct.songs.push (kanta);
subukan {
var connection = naghihintay voicechannel.join ();
queuecontruct.connection = koneksyon;
Maglaro (message.guild, queuecontruct.songs [0]);
} Catch (err) {
Console.log (mali);
queue.delete (message.guild.id);
Bumalik message.channel.send (err);
}
} Else {
ServerQueue.songs.push (kanta);
Console.log (serverQueue.songs);
Bumalik message.Channel.Send (`$ {song.title} ay idinagdag sa queue!`);
}
}
Function skip (mensahe, serverQueue) {
Kung (! mensahe.member.voiceChannel) bumalik message.channel.Send ('Kailangan mong maging sa isang channel ng boses upang ihinto ang musika!');
Kung (! serverQueue) bumalik message.Channel.Send ('Walang kanta na maaari kong laktawan!');
ServerQueue.connection.dispatcher.END ();
}
Function stop (mensahe, serverQueue) {
Kung (! mensahe.member.voiceChannel) bumalik message.channel.Send ('Kailangan mong maging sa isang channel ng boses upang ihinto ang musika!');
ServerQueue.songs = [];
ServerQueue.connection.dispatcher.END ();
}
Function Play (Guild, Song) {
Const serverQueue = queue.get (guild.id);
Kung (! Song) {
ServerQueue.voiceChannel.leave ();
queue.delete (guild.id);
Bumalik;
}
Const dispatcher = serverqueue.connection.playstream (ytdl (song.url))
.on ('end', () => {
Console.log ('natapos na ang musika!');
serverQueue.songs.shift ();
Maglaro (guild, serverqueue.songs [0]);
})
.on ('error', error => {
Console.Error (error);
});
dispatcher.etvolumelogarithmic (serverQueue.volume / 5);
}
Client.login (token);
Sa pagtatapos, mas mahusay na i-restart ang bot, pagkatapos ay maaari kang pumunta sa iyong server, kumonekta sa channel ng boses at ipasok ang anumang utos ng pakikipag-ugnayan, pagsuri kung paano tumugon sa bot.
Kung ang variant sa itaas ng bot ay hindi angkop para sa iyo, maaari mong mahanap ang source code sa parehong github at kopyahin ang mga ito sa iyong computer. Ang prinsipyo ng pagpaparehistro at paglulunsad ay nananatiling pareho, kaya kung kinakailangan, i-edit lamang ang tapos na code, at pagkatapos ay magpatuloy sa pagsubok ng bot.
Sa artikulong ito, hindi namin nakakaapekto sa paglabas ng isang bot sa hosting, ipamahagi ito sa iba pang mga gumagamit, na lumilikha ng isang avatar at ang paggamit ng mga bukas na site, mula sa kung saan maaari itong awtorisadong. Ang lahat ng ito ay hiwalay na mga proseso na dapat na nakikibahagi lamang kapag pinuntahan mo ang iyong kakayahan upang lumikha ng mga bot at handa nang ipamahagi ang mga proyekto sa network.