En ĉi tiu artikolo, ni parolos pri permane kreante bot por ludi muzikon en malakordo. Vi povas simple kopii la tutan prezentitan kodon, kaj redakti ĝin por vi mem, se vi posedas JavaScript-kapablojn. La bot estis kreita de ni, sed ĉe iuj stadioj la uzanto ankoraŭ povas alfronti malsamajn problemojn, do ni konsilas vin zorge legi ne nur niajn instrukciojn, sed ankaŭ aperante sur la ekranaj eraraj kodoj se ekzistas tiaj.
Se ĝi rezultas, ke ĉi tiu materialo estas tro komplika por vi aŭ ne taŭga por aliaj kialoj, uzu pretajn liberajn robotojn por ludi muzikon. La artikolo pri la suba ligilo trovos detalajn informojn pri ĉi tio kaj vi povas efektivigi la taskon.
Legu pli:
Aldonante muzikan bot al la servilo en malkonkordo
Ludu muzikon per bot en malkonkordo
Paŝo 1: Krei novan peton
Ĉiu bot por la forĵetado devas esti registrita en la oficiala portalo por programistoj. Do vi aliras al ĉiuj necesaj agordoj asociitaj kun la permesoj kaj la ĝenerala konduto de la bot, vi povas kopii la ligon al ĝia rajtigo en la persona servilo kaj uzi la unikan ĵeton, kiu estas bezonata por plua evoluo de komandoj.
Iru al la oficiala retejo de Discord Developer Portal
- Uzu la supran ligilon por malfermi la ĉefan paĝon de la portalo por programistoj, ensalutu al la malkonkorda persona konto kaj alklaku la "Novan Aplikon" por krei novan aplikon.
- Enigu lian nomon, donita la unikeco, ĉar se estas multaj robotoj kun la sama nomo, ĝi ne eblos krei ĝin - anonco pri renomado estas sciigita.
- Post kompletigo, malfermu la menuon sur la retejo kaj elektu "Bot" kategorio.
- Kontraŭ la "Build-A-Bot" ŝnuro alklaku la "Aldoni Bot".
- Konfirmu la aldonon de la bot por la elektita apliko.
- Per konata menuo, iru al «OAuth2».
- Ĉi tiu sekcio respondecas pri la ĝeneralaj parametroj de la bot kaj ĝia rajtigo. En la "Scopes" bloko, marku la "bot" alineo.
- En la listo de permesoj, nepre aktivigu la ligon al voĉaj kanaloj kaj la kapablo paroli, ĉar ĝi estas necesa por plua dissenda muziko.
- La bot devus povi legi kaj sendi mesaĝojn, do ne forgesu ebligi ĉi tiujn opciojn en la sekcio kun tekstaj konversaciaj permesoj. Kompreneble, vi povas provizi ĉiujn permesojn samtempe, sed ĉi tiu aliro estas nekredebla, precipe en kazoj, kie vi faras bot por amasa uzanto.
- Tuj kiam la permeso-agordo estas finita, kopiu la ligon por la unua rajtigo de la bot sur la servilo, ĉar alie aldonu ĝin ĝis ĝi rezultas.
- Sekvu ĉi tiun ligon kaj elektu la testan servilon, kie vi volas kontroli la bot.
- Konfirmi kapton kaj atendi informojn pri sukcesa rajtigo.
Nun vi havas bot kun unika signo, kaj la bot jam estis aldonita al la servilo, sed dum en senkonekta reĝimo. Por komenci ĝin, ĝi devos plenumi kelkajn pliajn agojn en la loka komputilo, ĉar dum ni ne malŝarĝas la boting boting por offline operacio.
Paŝo 2: Preparaj agoj
Preparaj agoj inkluzivas la kreadon de la bezonataj dosierujoj kaj dosieroj, la instalado de iloj kaj dependecoj por ili. Estas nenio komplikita en ĉi tio, vi nur bezonas fari ĉiun agon laŭvice, zorge sekvante la erarojn en iu ajn stadio.
- Krei dosierujon kun la nomo de la bot. Vi povas elekti ajnan lokon, sed la hejma dosierujo de la uzanto plej taŭgas por ĉi tio.
- Krei du dosierojn en ĝi: "config.json" kaj "index.js". En la unua instali la ĝeneralan agordon de la bot - ĝia prefikso kaj unika token, kaj en la dua - la tuta programo-kodo kun komandoj kaj komunaj taskoj de ĉi tiu ilo.
- Por la laboro de la bot bezonos node.js. Ĉi tiu ilo estas desegnita por komenci skriptojn sur la loka komputilo. Sekvu la suban ligilon kaj elŝutu ĝian instalilon por Vindozo.
Elŝutu node.js de la oficiala retejo
- Atendu elŝuti la plenumeblan dosieron, kuru ĝin kaj pasigu la simplan instalan procedon, sekvante la instrukciojn montritajn sur la ekrano.
- Post tio, malfermu la "komandlinion" konvena por vi, ekzemple, enirante CMD en la "kuri" utileco (ĝi komencas la win + R klavoj kombinaĵo).
- Instalu la modulon por labori kun la malkonkordo API, kiu nomiĝas "Discord.js". Por fari ĉi tion, en la konzola fenestro, kiu malfermiĝas, enigu la NPM-Instalan Malkonkordon.
- Atendu sciigojn pri la ekrano pri sukcesa instalado, sen fermi la nunan konzolan fenestron. Se eraroj aperas, lernu sian kodon kaj uzu la serĉilon por trovi laboran decidon pri la forumoj aŭ la oficiala retejo.
Rezulte, la hejma dosierujo de la uzanto devas aperi dosierojn ligitajn kun la komponanto de nodo.js kaj aldonita post la modulo. Rekomencu la komputilon por ke la bot ne havas malfacilecon, tiam iru al la sekva paŝo.
Paŝo 3: Redaktado de dosiero-agorda dosiero
Vi jam scias, ke en la kreita BOT-agorda dosiero estos ĉio de vicoj de la kodo, kiu respondecas pri la uzata prefikso (simbolo antaŭ eniri la komandon sur la servilo) kaj unikan ĵeton, kiu difinas la aplikaĵon en la API. Por plenumi ĉiujn pliajn agojn, ni rekomendas elŝuti programon kun js sintaksa subteno aŭ ajna antaŭita tekstoredaktilo se ĉi tio ne estis farita antaŭe. La artikolo pri la suba ligilo vi povos konatiĝi kun la disponeblaj taŭgaj solvoj.
Legu pli: elektante la disvolviĝan medion por programado
Tuj kiam ĝi estas instalita sur la komputilo kaj preta labori, vi povas sekure komenci redakti la agordan dosieron, enirante uzantojn tie.
- Rulu la dosieron config.js per tekstoredaktilo aŭ evoluada medio, enmetu la suban kodon.
{
"Prefikso": "!",
"Token": "Via-Toke"
}
Ŝanĝu la prefikson en duoblaj citaĵoj al la dezirata aŭ lasu ekkrion. Ekzemplo de komando uzanta ĉi tiun signon aspektas tiel ĉi.
- Iru al via bot sur la evoluada portalo, trovu unikan ĵeton kaj kopiu ĝin.
- Enmetu vian-toke-inspektadon anstataŭ forigi duoblajn citaĵojn.
- Konservu la ŝanĝojn kaj fermu ĉi tiun dosieron. Parenteze, vi povas plenumi la saman agon per norma "kajero".
Pri ĉi tiuj agoj kun la agorda dosiero estas finita, ne plu bezonas preskribi ununuran linion de kodo. Fermu ĝin, sen forgesi savi la redaktojn, kaj plue skribi la bot por ludi muzikon.
Paŝo 4: Juĝo Komencanta Bot
Unue, ni devas certigi, ke la bot estas ĝenerale funkcianta sur la servilo kaj iras al la interreta reĝimo, necesos skribi sian ĉefan parton de la kodo al index.js, kaj tiam uzu node.js por komenci.
- Tra la evoluiga medio aŭ la elektita tekstoredaktilo, malfermu la menciitan dosieron por redaktado.
- Enmetu la blokon de kodo, kiu respondecas pri la dependeca instalado kaj indikas la uzitajn modulojn:
Const Discalord = Postulas ('Discord.js');
const {
Prefikso,
signo
} = Postulas ('./ config.json');
const ytdl = postulas ('ytdl-kerno');
- Kun la helpo de la antaŭe specifaj signoj, kreu klienton kaj ensaluton, kiu estas efektivigita per enigo de nur du simplaj linioj:
Const kliento = nova discord.client ();
Kliento.Login (signo);
- I restas nur por specifi la lastajn bazajn liniojn por aŭskulti la bot.
CLIENTS.Once ('Ready', () => {
Console.log ('Ready!');
});
Kliento.Once ('Rekonektado', () => {
Console.log ('Rekonektado!');
});
Kliento.Once ('malkonekti', () => {
Console.log ('Malkonektiĝu!');
});
- Pligrandigu la menuon "Dosiero" kaj konservu la ŝanĝojn.
- Rulu la konzolon denove konvena.
- Enigu la komandon de la nodo index.js por komenci la bot-skripton.
- Se ĝiaj dosieroj ne troviĝas en la hejma dosierujo de la uzanto, post kiam nodo devos specifi kompletan, lasu ilin.
- La sukcesa lanĉo de la bot estas indikita per la aperita surskribo "Ready!".
- Malfermu malkonkordon kaj certigu, ke la bot iris al la statuso de "interrete".
Paŝo 5: Skribi la ĉefan kodilon de la muzika bot
La plej kompleksa procezo restis - skribante la bazan kodon por la muzika bot. Ekzistas listo de taskoj, kiujn ĝi devas plenumi: legante mesaĝojn kaj prilaboradon, difino de kanto-nomo aŭ ĝia adreso, konektanta al voĉa kanalo kaj reproduktado. Permesoj pri ĉio ĉi bot estas, do vi nur bezonas specifi agojn per JavaScript-funkcioj, kiuj estas prezentitaj en la sama "index.js" dosiero.
Aldoni simplan funkcion por legi mesaĝojn:
CLIENTS.ON ('Mesaĝo', Async Mesaĝo => {
}
I konsistas el nur du linioj, sed permesos al la bot por preni laŭmendan demandon kaj prilabori ĝuste. Oni povas diri, ke ĉi tio estas unu el la plej gravaj teamoj por robotoj de iuj specoj. Nepre aldonu ignorajn mesaĝojn de aliaj robotoj enirantaj
Se (mesaĝo.Author.bot) revenu;
Ĉi tio evitas konfliktojn uzante plurajn robotojn sur la servilo samtempe. Poste, necesos kontroli la prefikson tiel, ke la bot akceptis la teamon aŭ resendis ĝin.
Se (! Message.Content.Startswith (prefikso)) revenu;
Kontrolado lanĉita komandojn estas efektivigita per simplaj se operatoroj, kaj la dezajno en nia kazo aspektas tiel:
Const Serelqueue = Queue.Get (Message.Guild.Id);
Se (mesaĝo.Content.Startswith ('$ {prefix} ludi) {
Ekzekuti (mesaĝo, servilo);
Revenu;
} Alie se (mesaĝo.Content.Startswith ('$ {prefix} Skip`) {
Skip (Mesaĝo, Serverqueue);
Revenu;
} Alie se (mesaĝo.Content.Startswith (`$ {prefix} halti) {
Halti (mesaĝo, servilo);
Revenu;
} Alia {
Message.Channel.send ('Vi devas uzi la ekzistantan komandon!')
}
Bonvolu noti, ke la funkcio Send ('') sendas la mesaĝon al la uzanto, se ĝi subite eniras la ne-laboran komandon. Ĉi tiu mesaĝo, kiun vi povas redakti, ŝanĝante la surskribon inter citiloj.
Nun la bot lernis preni komandojn, sed ĝis ĝi povas interagi kun ili, ĉar la agoj ne estas specifitaj. Unue aldonu la reklaman komandon, kiu respondecas pri reproduktado. Por tio, ĝi bezonas tabelon kun la sekva formo:
Const queue = nova mapo ();
Li sendas ĉiujn komandojn en la atendovico kaj faras la kantojn ludi nur kiam la antaŭa finiĝas. Poste, necesos krei funkcion, kiu kontrolos ĉu la uzanto ligita al la voĉa kanalo kaj ĉu la bot estas la respondaj permesoj.
Async-funkcio ekzekuti (mesaĝo, servilo) {
const args = mesaĝo.Content.split ('');
Const voicechannel = Message.Member.ViiceChannel;
Se (! VoiceChannel) Reveno Message.Channel.send ('aŭskulti muzikon, vi devas esti en voĉa kanalo!');
Const Permissions = VoiceChannel.permissionsfor (Message.Client.user);
Se (! Permissions.has ('Connect') ||! Permissions.has ('Parolu')) {
Reveno Message.Channel.send ('Mi bezonas permesilojn aliĝi kaj paroli vian voĉan kanalon!');
}
}
Sekva ago - konektanta la ytdl-bibliotekon, ĉar ĉi tiu bot legos la nomon de la kanto en la ligilo de YouTube, post kiu ĝi estas ludata sur la servilo. I prenos por enmeti malgrandan pecon de kodo.
Const SongInfo = Atendos Ytdl.getinfo (Args [1]);
Const kanto = {
Titolo: SongInfo.title,
URL: Songinfo.Video_url,
};
La sekva bloko de kodo permesos vin kompreni ĉu estas kantoj en la atendovico aŭ vi povas tuj konektiĝi al la voĉa kanalo kaj komenci reprodukton.
Se (! Serverqueue) {
} Alia {
Serverqueue.songs.push (kanto);
Console.Log (Serverqueue.songs);
Reveno Message.Channel.send (`$ {Song.title} estis aldonita al la atendovico! ');
}
Poste venas iom komplika por novulo programistoj kontrakto skemo kiu aldonas kanton en tabelo kaj faras la sama ĉiufoje kiam vi eniras! Ludu, kontrolante la atendovico kaj elektante la ĝustan agon. Atentu la komentojn prezentitajn, kiuj permesas vin trakti ĉiujn subtilecojn.
// kreante kontrakton por la atendovico
Const queueuecontrutru = {
Texchannel: Message.Channel,
VoiceChannel: voiceChannel,
Konekto: NULL,
Kantoj: [],
Volumo: 5,
Ludado: Vera,
};
// Ŝanĝu atendovicon kun nia kontrakto
Queue.set (Message.Guild.Id, QueueContrutru);
// enmetu la komponaĵon en nian aron da kantoj
queuecontrutruction.songs.push (kanto);
provu {
// Ĉi tie ni provas aliĝi al la voĉa babilado kaj konservi la konekton en la objekto
var-konekto = atendas voicechannel.join ();
QueueContrict.connection = Rilato;
// vokante la reproduktan funkcion por komenci la kanton
Ludi (Message.Suild, QueueContrutrutru.songs [0]);
} Kapti (ERR) {
// Montri eraran mesaĝon se la bot ne povas aliĝi al la voĉa babilejo
Console.log (ERR);
queue.delete (Message.guild.Id);
Revenu mesaĝon.Channel.send (erar);
}
Kun la atendovico, ĉio estas klara, sed ankoraŭ ne ludas kantojn, ĉar ne ekzistas tasko por la teatra funkcio. Por fari ĉi tion en la kodo necesas aldoni strukturon
Funkcia ludo (gildo, kanto) {
Const Serelqueue = Queue.get (Gildo.ID);
Se (! Kanto) {
Serverqueue.voiceChannel.leave ();
queue.delete (gildo);
Revenu;
}
}
Ludado komencas uzi la funkcion PlayStream () kaj la specifitan ligon al la trako.
Const Dispatcher = Serverqueue.connection.playstream (YTDL (Song.url))
.on ('fino', () => {
Console.Log ('Muziko finiĝis!');
// Forigas la finitan kanton de la atendovico
Serverqueue.songs.Shift ();
// denove kaŭzas reproduktan funkcion kun la sekva kanto
Ludi (Gildo, Serverqueue.songs [0]);
})
.un ('eraro', eraro => {
Console.Error (Eraro);
});
Dispatcher.SetvolumeloGitmicMa (Serverqueue.Volume / 5);
Se vi volas aldoni kanton Skip Funkcio, ekzemple, kiam vi decidas ludi playlist, unue prizorgi la taŭgan komandon, kaj poste aldoni tian fragmenton:
Funkcio Skip (Mesaĝo, Serverqueue) {
Se (! Message.Member.ViiceChannel) Reveno Mesaĝo.
Se (! Serverqueue) Reveno Message.Channel.send ('Ne estas kanto, kiun mi povus salti!');
Serverqueue.connection.dispatcher.end ();
}
Proksimume la sama skemo ankaŭ laboras pri la halta funkcio, sed la bloko kun la kodo akiras iomete malsaman aspekton:
Funkcia halto (mesaĝo, servilo) {
Se (! Message.Member.ViiceChannel) Reveno Message.Channel.send ('
Vi devas esti en la voĉa kanalo por ĉesi muzikon! ');
Serverqueue.songs = [];
Serverqueue.connection.dispatcher.end ();
}
Konsideru, ke la informoj prezentitaj supre taŭgas ekskluzive por tiuj uzantoj, kiuj jam konas la JavaScript-lingvon aŭ nur okupiĝas pri studado kaj decidis krei muzikan bot. Se vi ne posedas kapablojn ĝenerale kaj la specifitaj blokoj kun la kodo, kiun vi ne diras ion ajn, simple enmetu la tutan fontkodon en la dosieron, anstataŭigu la mesaĝojn de la bot en la rusan (ili estas en citaĵoj) kaj ŝparas la Ŝanĝoj. Ĉiu fontkodo havas ĉi tiun specon:
Const Discalord = Postulas ('Discord.js');
const {
Prefikso,
signo
} = Postulas ('./ config.json');
const ytdl = postulas ('ytdl-kerno');
Const kliento = nova discord.client ();
Const queue = nova mapo ();
CLIENTS.Once ('Ready', () => {
Console.log ('Ready!');
});
Kliento.Once ('Rekonektado', () => {
Console.log ('Rekonektado!');
});
Kliento.Once ('malkonekti', () => {
Console.log ('Malkonektiĝu!');
});
CLIENTS.ON ('Mesaĝo', Async Mesaĝo => {
Se (mesaĝo.Author.bot) revenu;
Se (! Message.Content.Startswith (prefikso)) revenu;
Const Serelqueue = Queue.Get (Message.Guild.Id);
Se (mesaĝo.Content.Startswith ('$ {prefix} ludi) {
Ekzekuti (mesaĝo, servilo);
Revenu;
} Alie se (mesaĝo.Content.Startswith ('$ {prefix} Skip`) {
Skip (Mesaĝo, Serverqueue);
Revenu;
} Alie se (mesaĝo.Content.Startswith (`$ {prefix} halti) {
Halti (mesaĝo, servilo);
Revenu;
} Alia {
Message.Channel.send ('Vi devas eniri validan komandon!')
}
});
Async-funkcio ekzekuti (mesaĝo, servilo) {
const args = mesaĝo.Content.split ('');
Const voicechannel = Message.Member.ViiceChannel;
Se (! VoiceChannel) Reveno Message.Channel.send ('Vi devas esti en voĉa kanalo por ludi muzikon!');
Const Permissions = VoiceChannel.permissionsfor (Message.Client.user);
Se (! Permissions.has ('Connect') ||! Permissions.has ('Parolu')) {
Reveno Message.Channel.send ('Mi bezonas la permesojn aliĝi kaj paroli en via voĉa kanalo!');
}
Const SongInfo = Atendos Ytdl.getinfo (Args [1]);
Const kanto = {
Titolo: SongInfo.title,
URL: Songinfo.Video_url,
};
Se (! Serverqueue) {
Const queueuecontrutru = {
Texchannel: Message.Channel,
VoiceChannel: voiceChannel,
Konekto: NULL,
Kantoj: [],
Volumo: 5,
Ludado: Vera,
};
Queue.set (Message.Guild.Id, QueueContrutru);
queuecontrutruction.songs.push (kanto);
provu {
var-konekto = atendas voicechannel.join ();
QueueContrict.connection = Rilato;
Ludi (Message.Suild, QueueContrutrutru.songs [0]);
} Kapti (ERR) {
Console.log (ERR);
queue.delete (Message.guild.Id);
Revenu mesaĝon.Channel.send (erar);
}
} Alia {
Serverqueue.songs.push (kanto);
Console.Log (Serverqueue.songs);
Reveno Message.Channel.send (`$ {Song.title} estis aldonita al la atendovico! ');
}
}
Funkcio Skip (Mesaĝo, Serverqueue) {
Se (! Message.Member.ViiceChannel) Reveno Message.Channel.send ('Vi devas esti en voĉa kanalo por haltigi la muzikon!');
Se (! Serverqueue) Reveno Message.Channel.send ('Ne estas kanto, kiun mi povus salti!');
Serverqueue.connection.dispatcher.end ();
}
Funkcia halto (mesaĝo, servilo) {
Se (! Message.Member.ViiceChannel) Reveno Message.Channel.send ('Vi devas esti en voĉa kanalo por haltigi la muzikon!');
Serverqueue.songs = [];
Serverqueue.connection.dispatcher.end ();
}
Funkcia ludo (gildo, kanto) {
Const Serelqueue = Queue.get (Gildo.ID);
Se (! Kanto) {
Serverqueue.voiceChannel.leave ();
queue.delete (gildo);
Revenu;
}
Const Dispatcher = Serverqueue.connection.playstream (YTDL (Song.url))
.on ('fino', () => {
Console.Log ('Muziko finiĝis!');
Serverqueue.songs.Shift ();
Ludi (Gildo, Serverqueue.songs [0]);
})
.un ('eraro', eraro => {
Console.Error (Eraro);
});
Dispatcher.SetvolumeloGitmicMa (Serverqueue.Volume / 5);
}
Kliento.Login (signo);
Post kompletigo, estas pli bone rekomenci la bot, post kio vi povas iri al via servilo, konekti al la voĉa kanalo kaj enmeti ajnan komandon de la interago, kontrolante kiel reagi al la bot.
Se la supra varianto de la bot ne taŭgas por vi, vi povas trovi la fontajn kodojn sur la sama github kaj kopii ilin al via komputilo. La principo de registriĝo kaj lanĉo restas la sama, do se necese, simple redaktu la finitan kodon, kaj tiam procedu testi la bot.
En ĉi tiu artikolo, ni ne influis la malŝarĝon de bot sur gastigado, distribuas ĝin inter aliaj uzantoj, kreante avataron kaj la uzon de malfermaj lokoj, de kie ĝi povas esti rajtigita. Ĉio ĉi estas apartaj procezoj, kiuj devus esti engaĝitaj nur kiam vi zorgis pri via kapablo krei robotojn kaj pretas distribui projektojn en la reto.