当前位置: 首页 > 知识库问答 >
问题:

忽略某些语音通道discord.py

顾泰平
2023-03-14

我正在制作一个不和谐机器人来跟踪在语音频道上花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如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()

共有1个答案

万俟渝
2023-03-14

如果我正确理解了您的代码,您将能够检查他们刚刚加入的语音频道是否具有特定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检查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

参考资料:

  • 语音频道。id
 类似资料:
  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时

  • 问题内容: 我收到此错误,因为其中一位用户在他的帖子中添加了 错误:[$ sanitize:badparse]清理程序无法解析以下html块:<3 我写的代码 我想他要采取仅标签和标签 那可能吗? 谢谢! 问题答案: 您可以创建过滤器,以清理HTML。 我在其中使用了strip_tags函数 http://phpjs.org/functions/strip_tags/ 控制器: 视图: http:

  • 问题内容: 如何使装饰器忽略有关缓存键的某些函数参数? 例如,我有一个看起来像这样的函数: 如果我像这样应用装饰器,它将包含在缓存键中。结果,如果我尝试使用相同但不同的函数调用该函数,它将再次执行,这是我想避免的。我只想考虑论点。 问题答案: 使用cachetools可以编写:

  • 问题内容: 我使用matplotib的Axes API绘制了一些数字。我画的线之一代表理论上的预期线。它没有原始y和x限制的含义。我想要的是让matlplotlib在自动缩放限制时忽略它。我以前要做的是检查当前极限,然后绘制并重置极限。问题在于,当我绘制第三张图时,将与理论线一起重新计算极限值,这实际上扩展了图。 问题答案: 显而易见的方法是手动将限制设置为所需的值。(例如) 如果您不想手动查找限

  • 我想知道是否可以使用此方法忽略字段,因为我有一个要忽略的字段列表,在同一个类中,那么我该如何做呢? 我正在使用 谢谢

  • 我有我的OAuth服务器和客户端,它是由Oauth2授权的。 现在,如果我需要呼叫我的服务,我需要: > 使用以下API从服务器生成访问令牌: < code > localhost:9191/oauth/token?grant _ type =密码 其给出如下响应: 现在我正在传递访问令牌,以运行客户端服务,如下所示: 我需要跳过控制器的身份验证。我该怎么做?有人能帮忙吗 我的WebSecurit