gpt4 book ai didi

python - 检查已加入 channel 的特定用户

转载 作者:行者123 更新时间:2023-12-04 10:01:42 26 4
gpt4 key购买 nike

当特定用户移动到 afk 语音 channel 时,我正在尝试播放 mp3 文件。

在 discord.py 中重写:

async def on_voice_state_update(member, before, after):
user = bot.get_user("my user id")
if after.afk and user == True:
channel = bot.get_channel("the id of the channel I want the bot to connect to")
voice = await channel.connect()
voice.play(discord.FFmpegPCMAudio('directory of mp3 file'))
await asyncio.sleep(7)
await voice.disconnect()

问题

这一切都有效,直到我尝试在 if 语句中指定用户: user == True
但是,一旦我包含此要求,它就会停止工作。

我试过的

我试图给用户对象一个属性,比如 user.connect == Trueuser.joined == True等等......但没有运气。

目标

在它的完善形式中,我不仅可以指定加入 afk channel 以使事件工作所需的用户,还可以获取另一个用户的 channel ID,以便机器人可以连接到该 channel :
channel = bot.get_channel("the id the channel that a specified user is in")
编辑:

根据 Diggy 的回答,我将 if 语句更改为如下所示:
async def on_voice_state_update(member, prev, cur):
if member.id == 'my user id' and cur.afk:
channel = bot.get_channel('the channel id for the bot to connect to')
voice = await channel.connect()
voice.play(discord.FFmpegPCMAudio('dir of mp3 file'))
await asyncio.sleep(7)
await voice.disconnect()
else:
pass

但是,一旦我离开 channel ,它也会播放音频。

我试图通过使用 if member.id == 'my user id' and cur.afk and not prev.afk 来指定一旦我离开 channel 它就不会播放但是当我离开时它仍然在播放。

实验方案:

好的,所以我想这样做,以便机器人只加入上一个 channel ,因此一旦我离开 afk channel ,它就会在没有问题的 channel 中播放。这使它能够在 afk 之前的 channel 中工作和播放,这很棒但并不完美。它应该不需要加入 afk channel :
async def on_voice_state_update(member, prev, cur):
if member.id == 'my user id' and cur.afk:
prevchannel = prev.channel.id
channel = bot.get_channel(prevchannel)
voice = await channel.connect()
voice.play(discord.FFmpegPCMAudio('dir to mp3 file'))
await asyncio.sleep('duration of mp3 file')
await voice.disconnect()
else:
pass

我认为 elif 可能会起作用,例如:
elif prev.afk is not None and cur.afk is None:
pass

但它几乎只是忽略它。

- prevcur args 有时也不起作用,所以我必须切换回 beforeafter

最佳答案

您可以这样做的一种方法如下:

async def on_voice_state_update(member, prev, cur):
if member.id == your_user_id and cur.afk and not prev.afk:
voice = await member.voice.channel.connect()
voice.play(discord.FFmpegPCMAudio('directory of mp3 file'))
await asyncio.sleep(7)
await voice.disconnect()

关于python - 检查已加入 channel 的特定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61786152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com