कतार में स्वचालन अजगर कलह बीओटी

0

सवाल

यह है कि मैं कोड है:

@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)

मैं कर सकते हैं बनाने के लिए एक अलग कतार में प्रत्येक सर्वर के लिए और गाने को जोड़ने से यह करने के लिए आदेश:

-aq song_name

उदाहरण के लिए कतार:

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

मैं गाने खेल सकते हैं के साथ कतार में कमांड:

-pq 0 or -pq 1 or -pq 2

लेकिन समस्या यह है कि बॉट केवल निभाता है एक गीत और बंद हो जाता है के बाद यह खत्म, और मैं चाहते हैं बॉट खेलने के लिए अगले गीत के बाद वर्तमान गीत खत्म और जा रहा रखने के लिए जब तक पिछले गीत कतार में खेला जाता है.

कृपया मेरी मदद से बाहर इस के साथ....

अग्रिम में धन्यवाद!!!

2
0

सबसे पहले, अपने शब्दकोश ({0: 'abcdefu', 1: 'stereo hearts', 2: 'shivers'}) कर सकते हैं वास्तव में सिर्फ एक सूची के बाद से, कुंजी कर रहे हैं मूल रूप से सिर्फ सूचकांक है.

दूसरी बात, मैं किसी भी अनुभव नहीं है में ऑडियो के साथ discord.py लेकिन यह की तरह लगता है अपने pq समारोह वास्तव में नहीं है जाने के लिए अगले गीत. यह कॉल transformer समारोह में एक बार और यह thats. ऐसा लगता है कि वास्तव में आप सब करना है बस पाश के माध्यम से कतार और प्रत्येक गीत खेल. यहाँ कुछ psuedocode कि उपयोगी हो सकता है:

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

दोषी number=0 की अनुमति होगी के लिए पूरे कतार खेलने के लिए यदि कोई संख्या निर्दिष्ट किया गया था.

2021-11-23 18:41:58

हाय, सबसे पहले, के लिए खेद जवाब इतनी देर से, लैपटॉप तोड़ दिया । किसी भी तरह, मैं ऐसा करने की कोशिश की है कि इससे पहले कि. समस्या यह है कि पाश के अभ्यस्त के लिए इंतजार पहला गीत खत्म करने के लिए, यह सिर्फ वेतन वृद्धि इटरेटर जबकि पहला गीत अभी भी खेल रहा है, जो एक त्रुटि देता है कि कहते हैं, ऑडियो पहले से ही है ।
xBatmanx

आह ठीक है, मैं समझते हैं । वहाँ है एक पैरामीटर के play समारोह कहा जाता है after(discordpy.readthedocs.io/hi/नवीनतम/...). यह इरादा है के लिए त्रुटि हैंडलिंग लेकिन ऐसा लगता है कि यह प्रयोग किया जाता है आमतौर पर करने के लिए या तो दोहराने एक गाना या खेलने के एक और एक है । इसके अलावा बाहर की जाँच इस पोस्ट. यह एक सच में सरल तरीका है का उपयोग करने के लिए after पैरामीटर है कि अपनी स्थिति फिट बैठता है
Roopesh-J

हाँ, मैं वास्तव में यह समझ से बाहर बाद में उस रात!. धन्यवाद के लिए डाल करने के प्रयासों में मदद! वास्तव में इसे सराहना करते हैं ।
xBatmanx

सबसे अच्छा जवाब

0

तो, अपनी समस्या को हल करने, मैं इस पर अमल कोड और यह काम करता है.

मैं मेरे कतार है जो एक शब्दकोश, ट्रांसफार्मर के लिए समारोह, और एक संख्या है जो चूक करने के लिए 0 (के लिए कतार खेलने के लिए शुरू से ही).

और का उपयोग कर after में पैरामीटर समारोह में खेलते हैं, मुझे बुला रखा है, समारोह और रखा पुनरावृति संख्या के रूप में लंबे समय के रूप में यह है की तुलना में कम लंबाई की कतार ।

यह ऑटो-गाने निभाता कतार में.

मुझे पता है कि यह कोड काम करता है लेकिन, अगर किसी भी सुधार किया जा सकता है, मैं सुझाव के लिए खुला.

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())

धन्यवाद!.

2021-12-03 06:39:41

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में