In dit artikel zullen we praten over handmatig een bot maken voor het spelen van muziek in Discord. U kunt eenvoudig de gehele ingediende code kopiëren en deze voor uzelf bewerken als u JavaScript-vaardigheden bezit. De Bot is door ons gemaakt, maar bij sommige fasen kan de gebruiker nog steeds met verschillende problemen worden geconfronteerd, dus we adviseren u om niet alleen onze instructies voorzichtig te lezen, maar ook op de schermfoutcodes verschijnen als er zo is.
Als het blijkt dat dit materiaal voor u te gecompliceerd is of niet geschikt is om andere redenen, gebruik dan kant-en-klare gratis bots om muziek te spelen. Het artikel op de onderstaande link vindt u gedetailleerde informatie over dit en u kunt de taak implementeren.
Lees verder:
Een muzikale bot toevoegen aan de server in Discord
Speel muziek door bot in onenigheid
Stap 1: Een nieuwe aanvraag maken
Elke bot voor de gooi moet worden geregistreerd op het officiële portal voor ontwikkelaars. Dus u krijgt toegang tot alle nodige instellingen die zijn gekoppeld aan de machtigingen en het algemene gedrag van de BOT, kunt u de link naar zijn toestemming op de persoonlijke server kopiëren en het unieke token gebruiken, dat nodig is voor verdere ontwikkeling van opdrachten.
Ga naar de officiële website van Discord Developer Portal
- Gebruik de bovenstaande link om de hoofdpagina van de portal voor ontwikkelaars te openen, meld u aan bij het Personal-account van de Discord en klik op de "Nieuwe toepassing" om een nieuwe applicatie te maken.
- Voer zijn naam in, gezien de uniciteit, omdat als er veel bots met dezelfde naam zijn, het niet mogelijk zal zijn om het te creëren - een kennisgeving van hernieuwing is op de hoogte gebracht.
- Open na voltooiing het menu op de site en selecteer de categorie "Bot".
- Tegenover de string "Build-a-bot" Klik op de "Bot toevoegen".
- Bevestig de toevoeging van de BOT voor de geselecteerde toepassing.
- Ga door een vertrouwd menu, ga naar «Oauth2».
- Dit gedeelte is verantwoordelijk voor de algemene parameters van de BOT en de machtiging ervan. Markeer in het "Scopes" -blok de paragraaf "Bot".
- Zorg er in de lijst met machtigingen de verbinding met spraakkanalen en het vermogen om te praten, omdat het nodig is voor verdere uitzendmuziek.
- De BOT moet in staat zijn om berichten te lezen en te verzenden, dus vergeet niet om deze opties in de sectie met tekstchatificaten in te schakelen. Natuurlijk kunt u alle machtigingen tegelijk verstrekken, maar deze aanpak is ongelooflijk, vooral in gevallen waarin u een bot maakt voor een massa-gebruiker.
- Zodra de machtigingsinstelling is voltooid, kopieert u de koppeling voor de eerste autorisatie van de bot op de server, omdat anders dan voeg deze toe totdat deze blijkt.
- Volg deze link en selecteer de testserver waar u de bot wilt controleren.
- Bevestig Capture en wacht op informatie over een succesvolle autorisatie.
Nu heb je een bot met een uniek token, en de bot is al toegevoegd aan de server, maar in de offline-modus. Om het te starten, moet het een paar acties op de lokale computer uitvoeren, want terwijl we de Boting Boting voor offline bewerking niet laden.
Stap 2: Voorbereidende acties
Voorbereidende acties omvatten de oprichting van de vereiste directory's en bestanden, de installatie van gereedschappen en afhankelijkheden voor hen. Er is niets ingewikkeld in dit, u hoeft alleen elke actie op zijn beurt, zorgvuldig de fouten in elk stadium te volgen.
- Maak een map met de naam van de bot. U kunt een plaats kiezen, maar de thuismap van de gebruiker is hier het meest geschikt voor.
- Maak er twee bestanden in: "Config.json" en "index.js". In de eerste installeer de algemene configuratie van de bot - het voorvoegsel en unieke token, en in de tweede - de volledige programmacode met opdrachten en gemeenschappelijke taken van deze tool.
- Want het werk van de bot heeft node.js. Deze tool is ontworpen om scripts op de lokale computer te starten. Volg de onderstaande link en download de installatieprogramma voor Windows.
Node.js downloaden vanaf de officiële site
- Verwacht het uitvoerbare bestand van het uitvoerbare bestand te downloaden, voert u deze uit en geef de eenvoudige installatieprocedure door, volgens de instructies op het scherm.
- Open daarna de "opdrachtregel" handig voor u, bijvoorbeeld het invoeren van CMD in het hulpprogramma "Run" (het start de combinatie van de WIN + R-toetsen).
- Installeer de module om met de Discord API te werken, die "Discord.js" wordt genoemd. Om dit te doen, in het CONSOLE-venster dat wordt geopend, voert u de NPM Install Discord.js FFMPEG-binaries opSscript YTDL-CORE --SAVE en druk op ENTER - zodat u onmiddellijk alle benodigde afhankelijkheden toevoegt.
- Wacht op meldingen op het scherm op een succesvolle installatie, zonder het huidige console-venster te sluiten. Als er fouten verschijnen, leer hun code en gebruik de zoekmachine om een werkbeslissing te vinden op de forums of de officiële website.
Dientengevolge moet de thuismap van de gebruiker bestanden verschijnen die zijn geassocieerd met het knooppunt. SC-component en toegevoegd na de module. Start de computer opnieuw op zodat de bot geen moeilijkheidsgraden heeft, ga dan naar de volgende stap.
Stap 3: Bot-configuratiebestand bewerken
U weet al dat u in het gemaakte botconfiguratiebestand al een paar rijen van de code bevindt die verantwoordelijk is voor het gebruikte voorvoegsel (symbool voordat u de opdracht op de server invoert) en een uniek token dat de toepassing in de API definieert. Om aan alle verdere acties te voldoen, raden we aan een programma te downloaden met JS SYNTAX-ondersteuning of elke geavanceerde teksteditor als dit niet eerder is gedaan. Het artikel op de onderstaande link kunt u vertrouwd maken met de beschikbare geschikte oplossingen.
Lees meer: de ontwikkelingsomgeving voor programmeren selecteren
Zodra het op de computer is geïnstalleerd en klaar om te werken, kunt u veilig beginnen met het bewerken van het configuratiebestand, waardoor u gebruikersgegevens invoeren.
- Voer het Config.js-bestand uit via een teksteditor of de ontwikkelingsomgeving, plaats de onderstaande code.
{
"Prefix": "!",
"Token": "You-Toke"
}
Wijzig het voorvoegsel in dubbele aanhalingstekens naar de gewenste of laat een uitroepteken achter. Een voorbeeld van een opdracht met dit bord ziet er als volgt uit:! Spelen.
- Ga naar je bot op het ontwikkelingsportaal, zoek daar een unieke token en kopieer het.
- Plaats in plaats daarvan de inspectie van uw Toke in plaats zonder dubbele aanhalingstekens te verwijderen.
- Sla de wijzigingen op en sluit dit bestand. Trouwens, kunt u dezelfde actie uitvoeren via een standaard "notebook".
Op deze acties met het configuratiebestand zijn voltooid, moet u niet langer een enkele regel van code voorschrijven. Sluit het, zonder te vergeten om de gemaakte bewerkingen op te slaan en ga verder met het verder schrijven van de bot voor het spelen van muziek.
Stap 4: Trial Start Bot
Ten eerste moeten we ervoor zorgen dat de bot over het algemeen op de server draait en naar de online-modus gaat, het is noodzakelijk om het hoofdgedeelte van de code naar index.js te schrijven en vervolgens Node.js te starten.
- Door de ontwikkelingsomgeving of de geselecteerde teksteditor, open het genoemde bestand om te bewerken.
- Plaats het blok van de code dat verantwoordelijk is voor de afhankelijkheidsinstallatie en geeft de gebruikte modules aan:
Const discord = vereisen ('discord.js');
const {
Voorvoegsel,
token
} = Vereisen ('./ config.json');
const ytdl = vereisen ('YTDL-kern');
- Met de hulp van de eerder gespecificeerde tokens, maak een client en login, die wordt uitgevoerd door slechts twee eenvoudige regels in te voeren:
Const client = nieuwe discord.client ();
Client.login (token);
- Het blijft alleen om de laatste basislijnen voor te specificeren voor het luisteren naar de bot.
Client.Once ('klaar', () => {
Console.log ('klaar!');
});
Client.Once ('opnieuw verbinden', () => {
Console.Log ('Reconneren!');
});
Client.Once ('Disconnect', () => {
Console.Log ('Disconnect!');
});
- Vouw het menu "Bestand" uit en sla de gemaakte wijzigingen op.
- Voer de console opnieuw op een handige manier.
- Voer de opdracht Node-index.js in om het botscript te starten.
- Als de bestanden zich niet bevinden in de home-directory van de gebruiker, moet na het knooppunt een compleet laten opgeven.
- De succesvolle lancering van de bot wordt aangegeven door de verschijnen inscriptie "Ready!".
- Open Discord en zorg ervoor dat de bot naar de status van "online" ging.
Stap 5: De hoofdcode van de muzikale bot schrijven
Het meest complexe proces bleef - het schrijven van de basiscode voor de muzikale bot. Er is een lijst met taken die het moet uitvoeren: het lezen van berichten en verwerkingsopdrachten, definitie van een songnaam of het adres, verbinden met spraakkanaal en afspelen. Machtigingen op al deze bot is, dus u hoeft alleen acties te specificeren met behulp van JavaScript-functies, die wordt uitgevoerd in hetzelfde "index.js" -bestand.
Voeg een eenvoudige functie toe om berichten te lezen:
Client.on ('bericht', async-bericht => {
}
Het bestaat uit slechts twee lijnen, maar staat de bot toe om een aangepaste query te maken en correct te verwerken. Er kan gezegd worden dat dit een van de belangrijkste teams is voor bots van alle soorten. Zorg ervoor dat u ignoring-berichten van andere bots toevoegt door binnen te gaan
if (bericht.author.bot) terugkeren;
Dit vermijdt conflicten tijdens het gelijktijdig gebruik van meerdere bots op de server. Vervolgens zal het nodig zijn om het voorvoegsel te controleren, zodat de bot het team accepteerde of heeft teruggekeerd.
if (! -bericht.content.startswith (prefix)) terugkeren;
Het controleren van gelanceerde opdrachten wordt uitgevoerd met behulp van eenvoudig als operators en het ontwerp in ons geval eruit ziet:
Const Serverqueue = Queue.get (bericht.guild.id);
if (bericht.content.startswith (`$ {prefix} play`)) {
Uitvoeren (bericht, Serverqueue);
Opbrengst;
} Else if (bericht.content.startswith (`$ {prefix} Skip`)) {
Skip (bericht, Serverqueue);
Opbrengst;
} Else if (bericht.content.startswith (`$ {prefix} stop`)) {
Stop (bericht, Serverqueue);
Opbrengst;
} Anders {
Message.Channel.Send ('U moet de bestaande opdracht gebruiken!')
}
Houd er rekening mee dat de functie Verzenden ('') het bericht naar de gebruiker verzendt als deze plotseling het niet-werkcommando binnenkomt. Dit bericht dat u kunt bewerken, waarbij de inscriptie in aanhalingstekens wordt gewijzigd.
Nu leerde de Bot opdracht te nemen, maar totdat het met hen kan communiceren, aangezien de acties niet zijn opgegeven. Voeg eerst de afspeelopdracht toe, die verantwoordelijk is voor het afspelen. Hiervoor is een array nodig met de volgende vorm:
Const queue = nieuwe kaart ();
Hij stuurt alle opdrachten in de wachtrij en maakt de nummers alleen af te spelen wanneer de vorige eindigt. Vervolgens is het nodig om een functie te maken die zal controleren of de gebruiker is aangesloten op het spraakkanaal en of de bot de bijbehorende machtigingen is.
Async-functie uitvoeren (bericht, Serverqueue) {
const args = bericht.content.split ('');
Const voicechannel = bericht.member.voonchechannel;
If (! VoiceChannel) Return Message.Channel.Send ('Om naar muziek te luisteren, moet je in spraakkanaal zijn!');
const machtigingen = voicechannel.permissionsfor (bericht.client.user);
If (! Permissies.has ('Connect') ||! Machtigingen.has ('Speak')) {
Retourbericht.Channel.Send ('Ik heb toestemming nodig om mee te doen en je stemkanaal te spreken!');
}
}
Volgende actie - de YTDL-bibliotheek aansluiten, omdat deze bot de naam van het nummer op de link van YouTube zal lezen, waarna het op de server wordt afgespeeld. Het zal duren om een klein stukje code-insert in te voegen.
Const songinfo = wacht op ytdl.getinfo (args [1]);
Const song = {
Titel: Songinfo.title,
URL: SONDINFO.VIDEO_URL,
};
In het volgende blok van de code kunt u begrijpen of er nummers in de wachtrij zijn of u kunt onmiddellijk verbinding maken met het spraakkanaal en het afspelen kunt beginnen.
If (! Serverqueue) {
} Anders {
Serverqueue.songs.push (Song);
Console.Log (Serverqueue.songs);
Retourbericht.Channel.Send (`$ {song.title} is toegevoegd aan de wachtrij!`);
}
Vervolgens komt een beetje gecompliceerd voor beginnende programmeurs een contractschema dat een nummer in een array toevoegt en elke keer dat u invoert, afspelen, het controleren van de wachtrij en het kiezen van de juiste actie. Let op de gepresenteerde opmerkingen, waarmee u alle subtiliteiten kunt omgaan.
// Een contract maken voor de wachtrij
Const queueconstruct = {
TextChannel: Message.Channel,
VoiceChannel: VoiceChannel,
Verbinding: null,
Liedjes: [],
Volume: 5,
Spelen: True,
};
// instellen wachtrij met ons contract
wachtrij.Set (bericht.guild.id, queueconstruct);
// Steek de compositie in onze reeks liedjes
queueconstruct.songs.push (song);
proberen {
// Hier proberen we deel te nemen aan de spraakchat en de verbinding opslaan in het object
Var verbinding = wacht op VoiceChannel.join ();
queueconstruct.connection = verbinding;
// belt de afspeelfunctie om het nummer te starten
PLAY (MESSAGE.GUILD, QUEUECONSTUUR.SONGS [0]);
} Catch (err) {
// Een foutmelding weergeven Als de bot niet lid kan worden van de stemchat
Console.log (err);
wachtrij.Delete (bericht.guild.id);
Retourbericht.Channel.Send (Err);
}
Met de wachtrij is alles duidelijk, maar speel nog steeds geen liedjes, omdat er geen toewijzing voor de speelfunctie is. Om dit in de code te doen, is het noodzakelijk om structuur toe te voegen
Function Play (Guild, Song) {
Const Serverqueue = Queue.get (Guild.ID);
If (! Song) {
ServerqueUe.voiceChannel.LEAVE ();
in de wachtrij.Delete (Guild.id);
Opbrengst;
}
}
Het afspelen begint met het gebruik van de Playstream () -functie en de opgegeven link naar het nummer.
Const-dispatcher = serverqueue.connection.playstream (YTDL (SONG.URL))
.on ('einde', () => {
Console.log ('muziek is voorbij!');
// verwijdert het voltooide nummer uit de wachtrij
Serverqueue.songs.Shift ();
// geeft weer afspeelfunctie met het volgende nummer
Spelen (Guild, ServerQuue.songs [0]);
})
.on ('fout', fout => {
Console.Error (fout);
});
dispatcher.setVolumelogarithmic (Serverqueue.volume / 5);
Als u bijvoorbeeld een Song Skip-functie wilt toevoegen, bijvoorbeeld wanneer u besluit een afspeellijst af te spelen, zorgt u voor het eerst voor de juiste opdracht en voeg dan een dergelijk fragment toe:
Functie Skip (bericht, Serverqueue) {
If (! Message.member.voiceChannel) Return Message.channel.Send ('Je moet in een spraakkanaal zijn om muziek te stoppen!');
If (! Serverqueue) Return Message.Channel.Send ('Er is geen nummer dat ik kon overslaan!');
Serverqueue.connection.dispatcher.d ();
}
Ongeveer hetzelfde schema werkt ook de stopfunctie, maar het blok met de code verwerft een iets andere look:
Function Stop (bericht, Serverqueue) {
If (! Message.member.voiceChannel) Return Message.channel.Send ('
Je moet in het spraakkanaal zijn om muziek te stoppen! ');
Serverqueue.songs = [];
Serverqueue.connection.dispatcher.d ();
}
Bedenk dat de hierboven gepresenteerde informatie uitsluitend geschikt is voor die gebruikers die al bekend zijn met de JavaScript-taal of alleen maar bezig zijn met het bestuderen en besloten om een muzikale bot te creëren. Als u geen eigen vaardigheden houdt in het algemeen en de opgegeven blokken met de code die u helemaal niets zegt, plaatst u eenvoudig de volledige broncode in het bestand, vervangt u de berichten van de BOT in het Russisch (ze zitten in offertes) en bewaar het veranderingen. Alle broncode heeft dit soort:
Const discord = vereisen ('discord.js');
const {
Voorvoegsel,
token
} = Vereisen ('./ config.json');
const ytdl = vereisen ('YTDL-kern');
Const client = nieuwe discord.client ();
Const queue = nieuwe kaart ();
Client.Once ('klaar', () => {
Console.log ('klaar!');
});
Client.Once ('opnieuw verbinden', () => {
Console.Log ('Reconneren!');
});
Client.Once ('Disconnect', () => {
Console.Log ('Disconnect!');
});
Client.on ('bericht', async-bericht => {
if (bericht.author.bot) terugkeren;
if (! -bericht.content.startswith (prefix)) terugkeren;
Const Serverqueue = Queue.get (bericht.guild.id);
if (bericht.content.startswith (`$ {prefix} play`)) {
Uitvoeren (bericht, Serverqueue);
Opbrengst;
} Else if (bericht.content.startswith (`$ {prefix} Skip`)) {
Skip (bericht, Serverqueue);
Opbrengst;
} Else if (bericht.content.startswith (`$ {prefix} stop`)) {
Stop (bericht, Serverqueue);
Opbrengst;
} Anders {
Message.Channel.Send ('U moet een geldige opdracht invoeren!')
}
});
Async-functie uitvoeren (bericht, Serverqueue) {
const args = bericht.content.split ('');
Const voicechannel = bericht.member.voonchechannel;
If (! VoiceChannel) Return Message.Channel.Send ('Je moet in een spraakkanaal zijn om muziek af te spelen!');
const machtigingen = voicechannel.permissionsfor (bericht.client.user);
If (! Permissies.has ('Connect') ||! Machtigingen.has ('Speak')) {
Retourbericht.Channel.Send ('Ik heb de rechten nodig om mee te doen en in je stemkanaal te spreken!');
}
Const songinfo = wacht op ytdl.getinfo (args [1]);
Const song = {
Titel: Songinfo.title,
URL: SONDINFO.VIDEO_URL,
};
If (! Serverqueue) {
Const queueconstruct = {
TextChannel: Message.Channel,
VoiceChannel: VoiceChannel,
Verbinding: null,
Liedjes: [],
Volume: 5,
Spelen: True,
};
wachtrij.Set (bericht.guild.id, queueconstruct);
queueconstruct.songs.push (song);
proberen {
Var verbinding = wacht op VoiceChannel.join ();
queueconstruct.connection = verbinding;
PLAY (MESSAGE.GUILD, QUEUECONSTUUR.SONGS [0]);
} Catch (err) {
Console.log (err);
wachtrij.Delete (bericht.guild.id);
Retourbericht.Channel.Send (Err);
}
} Anders {
Serverqueue.songs.push (Song);
Console.Log (Serverqueue.songs);
Retourbericht.Channel.Send (`$ {song.title} is toegevoegd aan de wachtrij!`);
}
}
Functie Skip (bericht, Serverqueue) {
If (! Message.member.voiceChannel) Return Message.Channel.Send ('Je moet in een spraakkanaal zijn om de muziek te stoppen!');
if (! Serverqueue) Return Message.Channel.Send ('Er is geen nummer dat ik kon overslaan!');
Serverqueue.connection.dispatcher.d ();
}
Function Stop (bericht, Serverqueue) {
If (! Message.member.voiceChannel) Return Message.Channel.Send ('Je moet in een spraakkanaal zijn om de muziek te stoppen!');
Serverqueue.songs = [];
Serverqueue.connection.dispatcher.d ();
}
Function Play (Guild, Song) {
Const Serverqueue = Queue.get (Guild.ID);
If (! Song) {
ServerqueUe.voiceChannel.LEAVE ();
in de wachtrij.Delete (Guild.id);
Opbrengst;
}
Const-dispatcher = serverqueue.connection.playstream (YTDL (SONG.URL))
.on ('einde', () => {
Console.log ('Muziek eindigde!');
Serverqueue.songs.Shift ();
Spelen (Guild, ServerQuue.songs [0]);
})
.on ('fout', fout => {
Console.Error (fout);
});
dispatcher.setVolumelogarithmic (Serverqueue.volume / 5);
}
Client.login (token);
Na voltooiing is het beter om de bot opnieuw op te starten, waarna u naar uw server kunt gaan, verbinding maakt met het spraakkanaal en een opdracht van de interactie invoeren en controleren hoe te reageren op de bot.
Als de bovenstaande variant van de BOT niet geschikt voor u is, kunt u de broncodes op dezelfde github vinden en ze naar uw computer kopiëren. Het registratieprincipe en de lancering blijft hetzelfde, dus bewerk het eenvoudig de voltooide code en ga dan verder met het testen van de bot.
In dit artikel hadden we geen invloed op de lozing van een bot op hosting, distribueer het onder andere gebruikers, waardoor een avatar en het gebruik van open sites ontstaat, van waaruit het kan worden toegestaan. Dit alles is afzonderlijke processen die alleen moeten worden ingezeten wanneer u uw vaardigheid hebt aangemaakt om bots te maken en zijn klaar om projecten op het netwerk te verdelen.