public/, puis rejoignez le salon de la personne qui demande et jouez-le :
src/commands/intro.ts
join() se résout quand le bot est dans le salon, play() quand le fichier a été joué, et leave() fait partir le bot. Tout le reste est fait pour vous : la connexion aux serveurs vocaux de Discord, le chiffrement, l’envoi du son au bon rythme, et le chiffrement de bout en bout que Discord exige pour le vocal.
Tout ce qu’a une connexion vocale est dans la référence ;
join() est sur VoiceChannel.Ce qui peut être joué
play() prend un fichier de public/ (asset('sounds/intro.ogg')), un fichier envoyé sur Discord, ou un lien qui commence par https://.
Discord ne joue que de l’Opus. Un fichier déjà en Opus ne coûte rien à jouer ; tout le reste est converti pendant la lecture par ffmpeg, que le bot trouve tout seul quand il est installé. Quand il ne l’est pas,
play() le dit :
Un fichier envoyé sur Discord
Une optionattachment permet à la personne d’envoyer la musique avec la commande, et play() la prend telle quelle :
src/commands/song.ts
Pause, reprise, arrêt
Ce qui joue peut être mis en pause, repris et arrêté de partout : une autre commande, un bouton.guild.voice est la connexion du bot dans un serveur, ou null quand il n’y est dans aucun salon vocal.
src/commands/pause.ts
stop()arrête ce qui joue : sonplay()se résout aussitôt.- Un nouveau
play()remplace ce qui jouait. leave()quitte le salon ; une connexion qui est partie ne peut plus jouer,join()à nouveau.
Se déplacer et être déplacé
join() sur un autre salon vocal du même serveur y déplace le bot, et redonne la même connexion. Quand quelqu’un déplace le bot ou le déconnecte, la connexion suit : voice.channel est là où il est maintenant, et voice.connected passe à false quand il a été déconnecté.
src/commands/follow.ts
Permissions et salons pleins
Le bot a besoin de Se connecter (Connect) pour rejoindre et de Parler (Speak) pour jouer. Sans elles,join() ou play() échoue en disant ce qui manque :
Options de join()
deaf(truepar défaut) : le bot n’entend rien, donc Discord ne lui envoie pas ce que disent les gens. Il ne fait que jouer.mute(falsepar défaut) : le bot apparaît avec le micro coupé.
Intents et chiffrement de bout en bout
Rejoindre demande l’intentGUILD_VOICE_STATES : ChapterJS le demande quand un fichier de votre projet appelle join(), et c’est grâce à lui que member.voiceChannel est connu. Il n’est pas privilégié.
Enregistrer ce que disent les gens n’existe pas encore.
Événements vocaux
Qui rejoint, quitte ou change de salon vocal.
VoiceConnection
Tout ce qu’a une connexion vocale.