【问题标题】:Ignore certain voice channel discord.py忽略某些语音通道 discord.py
【发布时间】:2020-09-24 01:06:01
【问题描述】:

我正在制作一个不和谐机器人来跟踪在语音频道中花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如 afk 频道。

这是我现在正在使用的事件

@client.event
async def on_voice_state_update(before, after):
    """Monitor status updates for voice channels"""
    s = session()
    # prefer nickname in server to actual discord username
    member_name = before.nick if before.nick else before.name
    try:
        member = s.query(Member).filter(Member.id == before.id).one()
        # update member names on each channel join
        member.name = member_name
    except NoResultFound:
        member = Member(
            id=before.id,
            name=member_name,
            last_join=datetime.datetime.now(),
            total_time=datetime.timedelta(0),
            in_chat=False
        )
        s.add(member)
    if after.voice.voice_channel is None:
        if member.in_chat:
            member.in_chat = False
            member.update_total_time()
        try:
            channel_name = before.voice.voice_channel.name
        except AttributeError:
            channel_name = "Unknown"
        print("{} left voice channel {}.  Total time: {}".format(
            member.name,
            channel_name,
            member.total_time
        ))
    else:
        if member.in_chat:

            if after.voice.is_afk or after.voice.self_deaf or after.voice.deaf:

                member.in_chat = False
                member.update_total_time()
        else:
            member.in_chat = True
            member.last_join = datetime.datetime.now()
        try:
            channel_name = after.voice.voice_channel.name
        except AttributeError:
            channel_name = "Private"
        print("{} joined voice channel {}.  Total time: {}".format(
            member.name,
            channel_name,
            member.total_time
        ))
    s.commit()
    sys.stdout.flush()

【问题讨论】:

  • 你能提供你用来跟踪时间的代码吗?是在活动中吗?命令?
  • 一个事件,我在帖子里加了

标签: python bots discord discord.py


【解决方案1】:

如果我正确理解您的代码,您将能够检查他们刚刚加入的语音频道是否具有特定 ID,假设是 AFK 频道的 ID:

@client.event
async def on_voice_state_update(before, after):
    """Monitor status updates for voice channels"""
    # replace 112233445566778899 with the channel's id you want to ignore
    if after.voice.voice_channel.id != 112233445566778899:
        s = session()
        # rest of your code

如果你想检查多个ID,你可以将它与一个列表进行比较:

@client.event
async def on_voice_state_update(before, after):
    """Monitor status updates for voice channels"""
    # starting code
    NULL_CHANNELS = [112233445566778899, 998877665544332211]
    if after.voice.voice_channel.id in NULL_CHANNELS:
        s = session()
        # rest of your code

参考资料:

【讨论】:

  • 仍在跟踪:/
  • 你能帮帮我吗?
  • @Golps 抱歉回复晚了。我刚刚编辑了答案 - 看起来更接近你所追求的吗?
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 2021-11-13
  • 1970-01-01
  • 2020-06-20
  • 2018-04-04
  • 2021-01-31
  • 2021-12-11
  • 2021-04-15
相关资源
最近更新 更多