【发布时间】:2020-08-30 03:29:22
【问题描述】:
我想制作一个不和谐的机器人来重复播放歌曲。假设变量 count 包含我希望歌曲重复的次数,我如何让这个命令 voice.play(discord.FFmpegPCMAudio(audio)) 重复 n 次,确保每次重复仅在歌曲完全播放后发生?
【问题讨论】:
标签: python python-3.x discord.py discord.py-rewrite
我想制作一个不和谐的机器人来重复播放歌曲。假设变量 count 包含我希望歌曲重复的次数,我如何让这个命令 voice.play(discord.FFmpegPCMAudio(audio)) 重复 n 次,确保每次重复仅在歌曲完全播放后发生?
【问题讨论】:
标签: python python-3.x discord.py discord.py-rewrite
VoiceClient.play() 有一个 after 参数,可用于再次播放音频:
from discord.ext import commands
from asyncio import run_coroutine_threadsafe as rct
bot = commands.Bot(prefix='your_prefix')
def play_next(ctx, audio, msg, n):
if n:
voice = get(bot.voice_clients, guild=ctx.guild)
rct(msg.edit(content='Finished playing the song, {n} more to go.'), bot.loop)
voice.play(FFmpegPCMAudio(audio), after=lambda e: play_next(ctx, audio, msg, n-1))
voice.is_playing()
else:
rct(msg.delete())
@bot.command()
repeat(ctx, n):
audio = 'your_audio_source'
voice = get(bot.voice_clients, guild=ctx.guild)
msg = await ctx.send(f'Started playing video {n} times')
voice.play(FFmpegPCMAudio(audio), after=lambda e: play_next(ctx, audio, msg, n-1))
voice.is_playing()
bot.run('your_token')
PS:这段代码中没有错误管理,你必须自己做。
【讨论】:
NameError: name 'self' is not defined。我该如何解决?
voice = get(self.bot.voice_clients, guild=ctx.guild) 和run_coroutine_threadsafe(ctx.send('Finished playing the song, {n} more to go.'), self.bot.loop) 中删除self.。
ctx.send('Finished playing the song, {n} more to go.')发送的消息?我试图保持不和谐消息的干净,只显示一条消息。
voice.is_playing() 命令的作用会很棒