如何让基于 Python 的 Discord Bot 随机播放不同的声音?

时间:2021-07-21 22:22:21

标签: python discord bots

我正在用 Python 编写一个 Discord Bot。 我希望它加入语音频道,然后从列表中随机播放不同的声音。 它可以每隔 10 秒播放一次特定的音频文件。

其他一切正常,机器人连接到一个频道等,但我不知道如何让它留在语音频道上并随机说话。

现在看起来像这样:

arvaus = [ *list of my files here* ]

@client.command()
async def arvaa(ctx):
   if not ctx.author.voice:
      return await ctx.send(ctx.message.author.mention + 'You need to connect to a voice channel')
    
guild = ctx.guild
voice_client: discord.VoiceClient = discord.utils.get(client.voice_clients, guild=guild)
audio_source =(discord.FFmpegPCMAudio(executable="F:/ffmpeg/bin/ffmpeg.exe", source=random.choice(arvaus)))
voice_client.play(audio_source, after=None)

所以基本上现在它会播放一个音频文件,直到我再次输入一个命令来触发另一个。

1 个答案:

答案 0 :(得分:0)

    async def play(self, ctx, *, query):
        """Plays a file from the local filesystem"""

        source = discord.PCMVolumeTransformer(discord.FFmpegPCMAudio(query))
        ctx.voice_client.play(source, after=lambda e: print(f'Player error: {e}') if e else None)

        await ctx.send(f'Now playing: {query}')

这是示例之一中的代码 discord_bot_voice myaybe 尝试在您的代码中实现这一点说在机器人连接后播放您拥有的文件中的随机声音

附加:如果你不播放任何声音,机器人会在一段时间后自动断开连接,所以也许只是让机器人播放文件直到随机时间没有声音

也许

arvaus = [ *list of my files here* ]

@client.command()
async def arvaa(ctx):
if not ctx.author.voice:
    return await ctx.send(ctx.message.author.mention + 'You need to connect to a voice 
channel')

guild = ctx.guild
voice_client: discord.VoiceClient = discord.utils.get(client.voice_clients, guild=guild)
for i in range(len(arvaus)):
    audio_source = (discord.FFmpegPCMAudio(executable="F:/ffmpeg/bin/ffmpeg.exe", 
    source=random.choice(arvaus)))
    randomtime = random.randint(20,200)
    await asyncio.sleep(ransomint)
    voice_client.play(audio_source, after=None)