คิวปลั๊กอินอัตโนมัติในภาษาไพธอน Discord bot

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

แต่ปัญหาคือ bot เป่าหีบเพลงเป็นอย่างเดียวที่หนึ่งเพลงและหยุดหลังจากที่มันจะเสร็จแล้วฉันต้องการ bot ที่จะเล่นต่อไปหลังจากเพลงปัจจุบันเพลงเสร็จกันต่อจนกระทั่งเมื่อเพลงที่อยู่ในคิวเล่นอย่างไร

ได้โปรดช่วยฉันออกไปกับเรื่องนี้...

ขอบคุณล่วงหน้า!!!

2
0

อย่างแรกเลยก็คือพจนานุกรมของคุณ({0: 'abcdefu', 1: 'stereo hearts', 2: 'shivers'})จริงก็เป็นรายชื่อตั้งแต่กุญแจก็แค่ indices.

อย่างที่สองฉันไม่มีประสบการณ์เกี่ยวกับเสียงใน discord.py แต่มันดูเหมือนของคุณ pq ฟังก์ชันไม่จริงไปต่อเพลง มันเรียกว่า transformer ฟังก์ชันครั้งนึงและพวกผู้ชมน่ะได้ยินพวกมัน มันดูเหมือนว่าจริงทั้งหมดที่คุณต้องทำคือเรื่องผ่านไปยังคิวแล้วเล่นกันเพลง ที่นี่เป็นบางอย่า psuedocode นั่นต้องการความช่วยเหลือเห:

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

Defaulting number=0 จะอนุญาตสำหรับทั้งหมดคิวการเล่นหากยังไม่มีจำนวนการกำหนดไว้แล้ว

2021-11-23 18:41:58

สวัสดีก่อนอื่นขอโทษสำหรับ replying ก็สายแล้วแล็ปท็อปถูกทำลาย ยังไงก็แล้ว,ฉันพยายามทำแบบนั้นมาก่อน ปัญหาก็คือการที่วนจะไม่รอคอยดวงแรกเพลงต้องทำให้เสร็จมันแค่ increments ที่ iterator ตอนแรกเพลงยังคงเล่นอยู่ซึ่งทำให้เกิดข้อผิดพลาดที่บอกว่าเสียงอยู่แล้วเล่นด้วยหรอก
xBatmanx

อ่าโอเคฉันเข้าใจ นั่นคือพารามิเตอร์ของ play ฟังก์ชันเรียกว่า after(discordpy.readthedocs.บ io/วิลเดน/ล่าสุด/...). มันแรงเกิดข้อผิดพลาดสำหรับการจัดการแต่มันดูเหมือนว่ามันถูกใช้โดยปรกติจะต้องเหมือนกัพูดเพลงหรือเล่นอีกคนนึง ยังตรวจสอนี่ โพส. มันแสดงเป็นจริงง่ายๆทางที่จะใช้ after พารามิเตอร์นั่นตรงกับสถานการณ์ของคุณ
Roopesh-J

ใช่อันที่จริงฉันคิดว่ามันออกมาทีหลังคืนนั้น!. ขอบคุณสำหรับให้อยู่ในความพยายามจะช่วยด้วย! รู้สึกซาบซึ้งใจอย่างมาก
xBatmanx

คำตอบที่ดีที่สุด

0

ดังนั้นเพื่อแก้ปัญหาของฉันฉันติดตั้งเพื่อใช้งานมันรหัสและมันได้ผล

ผมผ่านของฉันซักหน่อซึ่งพจนานุกรมให้รานสเฟอร์เมอร์ฟังก์ชันและตัวเลขซึ่งเป็น defaulted 0(สำหรับคิวการเล่นจากจุดเริ่มต้น).

และใช้ after พารามิเตอร์อยู่ในเล่นงานฉันก็ยังพยายามโทรหาเธอฟังก์ชันและเก็บ iterating เบอร์ตราบใดที่มันคือเวลาน้อยกว่าความยาวของคิวอีก

มันโดยอัตโนมัติเล่นเพลงอยู่ในคิวอีก

ผมรู้ว่านี่มันรหัสทำงานแต่ถ้ามีการปรับปรุงจะทำให้ฉันเปิดรับความแนะนำเลย

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่