Python ile yapılan Discord müzik botu 2 sunucuda çalışmıyor

hasancan0000

Hectopat
Katılım
3 Ocak 2020
Mesajlar
24
MüzikBotu

Bu benim müzik botunun kodları Python ile yaptım. Sorunum şu ki bir sunucuda şarkı çalıyorken diğerinde açmaya çalıştığımda sıraya eklendi deyip şarkı çalmıyor. Hatta ses kanalına bağlanmıyor hatta birinde seste iken diğer sunucudan komut verebiliyorum.
 
Hocam müzik botları hakkında pek bir bilgim yok ancak size fikir vermesi açısından bir olay paylaşacağım;
Python:
GAMES[ctx.channel.id] = {
        'last_char': random_char(),
        'msg_count': 0,
        'used_words': [],
        'last_author': None,
    }

#bu kodu farklı kanaldan aynı oyuna müdahale olmasın ve oyun her sunucuya özel olsun diye
#eklemiştim ve on_message eventinde;
if msg.channel.id in GAMES.keys():
        if not msg.content.startswith(MPREFIX):
            await oyun(msg)
#diyerek kontrol etmiştim ve oyunu asenkron olarak tek mesaj kanalına özel başlatmıştım
#Sorun buna benzer bir yöntem ile çözülebilir diye düşünüyorum

 
Python:
from ast import alias
import discord
from discord.ext import commands
import pprint
pp = pprint.PrettyPrinter(indent=4)

from youtube_dl import YoutubeDL

class music_cog(commands.Cog):
    def __getitem__(self, key):
        return getattr(self, key)
    def __setitem__(self, key, value):
        return setattr(self, key, value)

    def __init__(self, bot):
        self.bot = bot

        self.YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
        self.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}



    def search_yt(self, item):
        with YoutubeDL(self.YDL_OPTIONS) as ydl:
            try:
                info = ydl.extract_info("ytsearch:%s" % item, download=False)['entries'][0]
            except Exception:
                return False

        return {'source': info['formats'][0]['url'], 'title': info['title']}

    def play_next(self, guildId):
        if len(self[guildId]['music_queue']) > 0:
            self[guildId]['is_playing'] = True


            m_url = self[guildId]['music_queue'][0][0]['source']


            self[guildId]['music_queue'].pop(0)

            self[guildId]['vc'].play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next(guildId))
        else:
            self[guildId]['is_playing'] = False


    async def play_music(self, ctx):
        guildId = str(ctx.message.guild.id)
        if len(self[guildId]['music_queue']) > 0:
            self[guildId]['is_playing'] = True

            m_url = self[guildId]['music_queue'][0][0]['source']
            

            if self[guildId]['vc'] == None or not self[guildId]['vc'].is_connected():
                self[guildId]['vc'] = await self[guildId]['music_queue'][0][1].connect()


                if self[guildId]['vc'] == None:
                    await ctx.send("Lütfen Ses Kanalına Bağlanın")
                    return
            else:
                await self[guildId]['vc'].move_to(self[guildId]['music_queue'][0][1])
            

            self[guildId]['music_queue'].pop(0)

            self[guildId]['vc'].play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next(guildId))
        else:
            self[guildId]['is_playing'] = False

    @commands.command(name="oynat", aliases=["o","playing"], help="Youtube'dan seçilen bir şarkıyı çalar")
    async def play(self, ctx, *args):
        query = " ".join(args)
        guildId = str(ctx.message.guild.id)
        if hasattr(self, guildId) == False:
            self[guildId] = {
                'music_queue': [],
                'is_playing': False,
                'is_paused': False,
                'vc': None
            }
        voice_channel = ctx.message.author.voice.channel
        if voice_channel is None:
            await ctx.send("Lütfen Ses Kanalına Bağlanın!")
        elif self[guildId]['is_paused'] == True:
            self[guildId]['vc'].resume()
        else:
            song = self.search_yt(query)
            if type(song) == type(True):
                await ctx.send("Şarkı indirilemedi. Yanlış biçim başka bir anahtar sözcük deneyin. Bunun nedeni çalma listesi veya canlı yayın biçimi olabilir")
            else:
                await ctx.send("Sıraya şarkı eklendi")
                self[guildId]['music_queue'].append([song, voice_channel])
                
                if self[guildId]['is_playing'] == False:
                    await self.play_music(ctx)

    @commands.command(name="durdur", help="Çalınan geçerli şarkıyı duraklatır")
    async def pause(self, ctx, *args):
        guildId = str(ctx.message.guild.id)
        if self[guildId]['is_playing'] == True:
            self[guildId]['is_playing'] = False
            self[guildId]['is_paused'] = True
            self[guildId]['vc'].pause()
        elif self[guildId]['is_paused'] == True:
            self[guildId]['vc'].resume()

    @commands.command(name = "devam",  help="Bot Şarkıyı Oynatmaya Devam Eder")
    async def resume(self, ctx, *args):
        guildId = str(ctx.message.guild.id)
        if self[guildId]['is_paused'] == True:
            self[guildId]['vc'].resume()

    @commands.command(name="geç", aliases=["g"], help="Çalınan geçerli şarkıyı atlar")
    async def skip(self, ctx):
        guildId = str(ctx.message.guild.id)
        if self[guildId]['vc'] != None and self[guildId]['vc'].is_playing():
            self[guildId]['vc'].stop()

            await self.play_music(ctx)


    @commands.command(name="kuyruk", aliases=["k"], help="Sıradaki geçerli şarkıları görüntüler")
    async def queue(self, ctx):
        guildId = str(ctx.message.guild.id)
        retval = ""
        for i in range(0, len(self[guildId]['music_queue'])):

            if (i > 4): break
            retval += self[guildId]['music_queue'][i][0]['title'] + "\n"

        if retval != "":
            await ctx.send(retval)
        else:
            await ctx.send("Kuyrukta müzik yok")

    @commands.command(name="ktemizle", aliases=["kt", "bin"], help="Müziği durdurur ve kuyruğu temizler")
    async def clear(self, ctx):
        guildId = str(ctx.message.guild.id)
        if self[guildId]['vc'] != None and self[guildId]['is_playing'] == True:
            self[guildId]['vc'].stop()
        self[guildId]['music_queue'] = []
        await ctx.send("Müzik kuyruğu temizlendi")

    @commands.command(name="çık", aliases=["disconnect", "ç", "d"], help="Botu Ses Kanalından Atar")
    async def dc(self, ctx):
        guildId = str(ctx.message.guild.id)
        self[guildId]['is_playing'] = False
        self[guildId]['is_paused'] = False
        await self[guildId]['vc'].disconnect()
 

Geri
Yukarı