问题检查用户是否是机器人

时间:2021-04-03 15:35:33

标签: python-3.x discord.py

嗨,我正在尝试检查用户是否为 Discord 语音频道是机器人,并检查语音频道中是否没有其他成员可以暂停机器人播放。

我遇到的问题是我的支票没有按预期进行,并且会在频道中除自己之外没有其他人时播放音乐。

这是我正在使用的:

@bot.event
async def on_ready():
print(f"I'm online!")

channel = bot.get_channel(channelID)
the_guild = bot.get_guild(GuildID)
voice = await channel.connect()

for member in the_guild.members:
    if member.voice == bot is not None and member is None:
        voice.pause()
        print("paused")
else:
    voice.play(discord.FFmpegPCMAudio("Media_URL")) # #default channel

如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你的 if 语句根本没有任何意义,首先你要检查 member.voice == bot(它返回一个布尔值),然后检查它的结果是否不是 NoneType ,您还要检查 member is None 是否也没有任何意义。

您可以简单地遍历 channel.members 的每个成员并检查它是否是带有 Member.bot 的机器人

for member in channel.members:
    if member.bot:
        voice.pause()
        print("Paused")

不过这里有一个缺陷,如果语音频道中的任何成员是机器人,它就会停止播放音乐。您可以检查语音频道中有多少机器人,然后将其与频道中的成员总数进行比较:

counter = 0

for member in channel.members:
    if member.bot:
        counter += 1

if counter == len(channel.members):
    voice.pause()
    print("Paused")

如果你想要更短的版本:

counter = len([member for member in channel.members if member.bot])

if counter == len(channel.members):
    voice.pause()
    print("Paused")

参考: