Frontu Automatizácie v jazyku Python Rozbroje topánok

0

Otázka

Je to kód, ktorý mám:

@commands.command(pass_context=True, aliases= ["aq"])
async def add_queue(self, ctx, *, url):
  a = ctx.message.guild.id
  b = servers[a]
  global queue
  try: 
    b[len(b)] = url 
    user = ctx.message.author.mention
    await ctx.send(f'``{url}`` was added to the queue by {user}!')
  except:
    await ctx.send(f"Couldnt add {url} to the queue!")

@commands.command(pass_context=True, aliases= ["qp"], case_insensitive=True)
async def pq(self,ctx, number):
  a = ctx.message.guild.id
  b = servers[a]
  if int(number) in b:
    source = b[int(number)]
    self.cur_song_id = int(number)
    await ctx.send(f"**Now Playing:** {source}")
    await self.transformer(ctx, source)
    
async def transformer(self,ctx, url):
  player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True)
  if not ctx.message.author.voice:
    await ctx.send("You are not connected to a voice channel!")
    return
  elif ctx.voice_client and ctx.voice_client.is_connected():
    print('Already connected to voice')
    pass
  else:
    channel = ctx.message.author.voice.channel
    await ctx.send(f'Connected to ``{channel}``')
    await channel.connect()
  ctx.voice_client.play(player)

Môžem vytvoriť samostatnú frontu pre každý server, a pridať skladby na to príkaz:

-aq song_name

príklad frontu:

Your current queue is {0: 'abcdefu', 1: 'stereo hearts', 2: 'shivers'}

Môžem prehrávať skladby v poradí príkazom:

-pq 0 or -pq 1 or -pq 2

Ale problém je, že topánok len hrá jednu pieseň a prestane po skončí, a chcem topánok na prehratie nasledujúcej skladby po aktuálnej skladby končí a ďalej až do poslednej skladby v poradí sa hrá.

Prosím pomôžte mi s tým....

Vďaka Vopred!!!

2
0

Po prvé, vaše slovník ({0: 'abcdefu', 1: 'stereo hearts', 2: 'shivers'}) naozaj môže byť len zoznam keďže kľúče sú v podstate len indexov.

Po druhé, nemám žiadne skúsenosti so zvukom v discord.py ale vyzerá to, že vaše pq funkcia nemá vlastne prejsť na ďalšiu skladbu. To hovorov transformer funkcia raz, a to je to. Zdá sa, že naozaj všetko, čo musíte urobiť, je len slučky cez frontu a hrať každú skladbu. Tu je niekoľko psuedocode, ktoré by mohli byť užitočné:

@commands.command()
async def play_queue(self,ctx,number=0):
  for num in range(number,len(queue)):
    song = queue[num]
    # play the song

Default number=0 by umožnilo celého frontu hrať, ak nie počet bol stanovený.

2021-11-23 18:41:58

Ahoj, po Prvé, ospravedlňujeme sa za odpovede, tak neskoro, Notebook zlomil. V každom prípade, snažil som sa robiť, že pred. Problém je, že slučka zvyknutý čakať na prvú skladbu, ktorú chcete dokončiť, to len inkrementovanie iterator zatiaľ čo prvá skladba je stále hrá, ktorý dáva chybu, ktorá hovorí, AUDIO JE UŽ v režime PREHRÁVANIA.
xBatmanx

Ah ok, chápem. Tam je parameter play funkcia s názvom after(discordpy.readthedocs.io/sk/najnovších/...). Je určený pre spracovanie chýb, ale zdá sa, že je často používa buď opakovať skladbu alebo hrať iný. Tiež, pozrite sa na tento post. Ukazuje sa, naozaj jednoduchý spôsob, ako používať after parameter, ktorý sa hodí vašej situácii
Roopesh-J

Áno, vlastne som na to prišiel neskôr, že noc!. Vďaka za uvedenie v úsilí pomôcť! Naozaj si to vážim.
xBatmanx

Najlepšiu odpoveď

0

Takže, ak chcete vyriešiť môj problém, ja sa realizovať tento kód a funguje to.

Som zložil môj frontu, ktoré je slovník, aby transformer funkciu, a číslo, ktoré je zmeškaný na 0 (na fronte hrať od začiatku).

A pomocou after parameter v play funkciu, stále som volanie funkcie a uchovávať iterating počet, ako dlho, ako je to menej ako dĺžka frontu.

To auto-prehrá skladby v poradí.

Viem, že tento kód funguje ale, ak nejaké vylepšenia, možno, som otvorený návrhy.

async def transformer(self,ctx, number, que):
  player = await YTDLSource.from_url(que[number], loop=self.bot.loop,stream=True)
  await ctx.send(f"**Now Playing:** {que[number]}")
  ctx.voice_client.play(player, after=lambda e: asyncio.run_coroutine_threadsafe(self.transformer(ctx,number+1 , que),self.bot.loop) if number < len(que) else ctx.voice_client.pause())

Vďaka!.

2021-12-03 06:39:41

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................