Rehber Discord.js V12, botun müzik çalmasını sağlamak

Merhaba, daha önce botun rastgele değer üretmesini sağlamıştık, bugün ise botumuzun müzik çalmasını sağlayacağız.
Gerekli modüller:

JavaScript:
const Discord = require('discord.js');
//Discord.js.
const ytdl = require('ytdl-core');
//ytdl-core.
const opus = require('opusscript');
//opusscript

"NPM'i ytdl-Core" ve "NPM'i opusscript" ile kurulabiliyor.

Ve bir de ffmpeg gerekecek. Eğer hala kurulu değil ise:

işletim sisteminin Windows 64 Bit ise:https://github.com/BtbN/FFmpeg-Buil...-52/ffmpeg-N-100663-g71b82e4ffd-win64-gpl.zip indirin. Diğer Is'ler için: Download FFmpeg
Sonra bunun içindeki 3 exe olan klasörü bir yere çıkartalım.

Eki Görüntüle 843200

Önerim benim yaptığımın aynısını yapmanız: Yani direkt C'nin içindeki ffmpeg klasörüne çıkamanız.

Sonra "gelişmiş sistem seçeneklerini" açın, oradan ortam değişkenlerine girin. X için kullanıcı değişkenleri bölümünün altında buluna Path'ye basın.
Oradan "yeni" ye basın. Sonra oraya klasörü açtığınız yeri yazın. Benim yaptığım gibi yaparsanız, direkt C:\ffmpeg\ yazacaksınız.

Eki Görüntüle 843206

Sonra aynısını sistem değişkenleri adı altındaki Path'ya da yapıyoruz.

Eki Görüntüle 843209

Olup olmadığını test etmek için CMD'yi yönetici olarak çalıştırıyor, ve şunu yazıyoruz: ffmpeg
Böyle şeyler yazarsa tamam demektir:

Eki Görüntüle 843210
Kodumuz:

JavaScript:
const Discord = require('discord.js');
const ytdl = require('ytdl-core');
const opus = require('opusscript');

//gerekli moduller.

module.exports = {
name: "dinle",
description: "Müzik çalar",
//çalıştıran komutun ismi, ve açıklama.
async run (client, message, args, ops) {

if (!message.member.voice.channel) return message.channel.send('Müzik dinlemek için önce **ses kanalına** bağlanman gerekir.')

if (message.guild.me.voice.channel) return message.channel.send('Hali hazırda bot **birisi** için çalıyor.');

if (!args[0]) return message.channel.send('Lütfen şarkının **URL**sini gir.');

let validate = await ytdl.validateURL(args[0]);

if (!validate) return message.channel.send('Üzgünüm, bu geçerli bir **URL** değil.');

let info = await ytdl.getInfo(args[0]);

let connection = await message.member.voice.channel.join();

let dispatcher = await connection.play(ytdl(args[0], { filter: 'audioonly' }));

message.channel.send('Şimdi bir şarkı çalıyor.');
}

}

nasıl çalışıyor?

1. çıkartılan modüle isim ve açıklama yazıyoruz: [Mesela bu şekilde yazarsanız, !dinle url, çalacaktır. (Yani prefix+orayayazılankelime+boşluk+Video linki)]

JavaScript:
module.exports = {
name: "dinle",
description: "Müzik çalar",

2. bu kısım özneldir, vereceği tepkileri belirliyoruz.

JavaScript:
async run (client, message, args, ops) {

if (!message.member.voice.channel) return message.channel.send('Müzik dinlemek için önce **ses kanalına** bağlanman gerekir.') //ses kanalı uyarısı.

if (message.guild.me.voice.channel) return message.channel.send('Hali hazırda bot **birisi** için çalıyor.'); //Bot zaten şuan şarkı çalıyor!

if (!args[0]) return message.channel.send('Lütfen şarkının **URL**sini gir.'); //şarkının linkini girin.

let validate = await ytdl.validateURL(args[0]);

if (!validate) return message.channel.send('Üzgünüm, bu geçerli bir **URL** değil.'); //geçersiz link.

let info = await ytdl.getInfo(args[0]);

let connection = await message.member.voice.channel.join();

let dispatcher = await connection.play(ytdl(args[0], { filter: 'audioonly' }));

message.channel.send('Şimdi bir şarkı çalıyor.'); //Tebrikler, tüm bu zorluklara rağmen şarkı başarıyla çalmaya başladı!

Şarkıyı durdurmak için:

JavaScript:
if (msg.content.startsWith(prefix + "dur")) { //dur yerine yazdığınız şey şarkıyı durdurur:/
msg.guild.me.voice.channel.leave();
}

Kankam çok güzel konu açıkçası çok tebrik ettim çok rahat ve kolay ancak ffmpegi öyle kurmana gerek yoktu aslında NPM'i ffmpeg-static yapınca da sorun düzelir. :)

ayrıca ses kesilme sorunu oluyor bu sorunuda arkadaşlar şöyle çözücez kesinlikle bu sorun oluşuyor yaptıktan sonra eğer oluşmuyorsa ister yapın ister yapmayın kaliteli ve iyi gelmesini istiyor iseniz

const stream = ytdl(video.url, {filter: 'audioonly'}, {
ytdlOptions: {
quality: "highestaudio",
highWaterMark: 1 << 25
}
});

bu kodu if(video) değerinin altındaki yere atın ve sonucu görün

yanlız atın dediğim bu kod normaldede var sadece bu kod düzeltilmiş hali oyüzden ilk yaptığınızı silip yerine bu kodu ekleyin teşşekür ederim :)
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı