不和谐主题歌[已解决]

问题描述

我想给我的一些朋友们主题曲,并且已经可以使用下面的代码来实现

@commands.Cog.listener()
    async def on_voice_state_update(ctx,member,before,after):
        if member.name in theme_songs.keys():
            voice = await member.voice.channel.connect()
            voice.play(discord.FFmpegPCMAudio(source=f"theme_songs/{theme_songs[member.name]}"))

问题是每当发生任何事情(即静音,上线等)时,机器人都会被激活。 我该怎么做,以便只寻找成员加入?

编辑

我找到了一种解决方法方法添加

 if before.channel != after.channel:

它变成

@commands.Cog.listener()
async def on_voice_state_update(self,after):
    if before.channel != after.channel:
        if member.name in theme_songs.keys():
            voice = await after.channel.connect()
            voice.play(discord.FFmpegPCMAudio(source=f"theme_songs/{theme_songs[member.name]}"))

这不是一个完美的解决方案,但目前可以使用

解决方法

尝试添加另一个if,以检查他们是否加入了频道

@commands.Cog.listener()
async def on_voice_state_update(ctx,member,before,after):
    if before.channel is None:
        if member.name in theme_songs.keys():
            voice = await member.voice.channel.connect() 
            voice.play(discord.FFmpegPCMAudio(source=f"theme_songs/{theme_songs[member.name]}"))