【问题标题】:Kick "ghosts" users in Discord在 Discord 中踢“鬼”用户
【发布时间】:2017-12-03 02:12:40
【问题描述】:

我不知道如何创建一个函数或验证用户在一段时间内没有向不和谐服务器发送任何内容并踢该用户不活跃的东西。不像剪枝用户,剪枝会踢掉当时没有登录的用户。

我正在使用来自 Rapptz 的 discord.py,但您可以(如果可能)在您想要的任何包装器中给我一个示例。

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    如果您正在重写,您可以使用 history 异步迭代器来查找用户的最后一条消息。

    Documentation

    文档中的示例

    counter = 0
    # Limit is not required, but can make this a really slow operation if you don't use it.
    async for message in channel.history(limit=200): 
        if message.author == client.user:
            counter += 1
    

    另一种方法是使用on_message() 事件在 JSON 或任何其他数据库中跟踪“发送的最后一条消息”的时间戳。然后,您可以执行清除命令或每隔 X 秒执行一次。

    如果您不使用 rewrite 或者您使用的服务器有很多成员,后者可能是理想的选择。

    如果你使用on_message来处理时间戳,你可以这样实现

    @bot.event
    async def on_message(msg):
        # GET user (msg.author) and edit their timestamp on database
    

    【讨论】:

    • 我不想打扰你,但是,我是这个 API 的新手,我不知道我应该在哪里“放置”这段代码。如果我将它放在每条消息的@bot.event 中,则会显示错误。如果我把它放在 on_ready 中,它也会显示错误。我尝试搜索示例等,但不成功。
    • 抱歉回复晚了。我不知道你是否还在关注这个线程,但你不应该把它放在 on_ready 事件中,因为它只会在启动时运行。您应该使用 on_message 事件或在某个命令中。如果您向我展示您的代码,它将帮助我解决您的问题。
    • 我用 user_id 和 server_id 创建了一个 sqlite3 数据库,以及用户最后一条消息的日期。我也看到了服务器的所有成员,如果该成员不在用户数据表中,我将其插入实际日期,仅一次。所以,7天后,我踢掉了不发送任何消息的用户。
    • 所以你应该使用 on_message 事件。每次出现消息时,它都应使用新日期更新日期列。如果你想在 7 天之内做到这一点,它会踢用户,你需要在事件循环中创建一个事件。我真的帮不了你,你必须查看 asyncio 库才能弄清楚如何做到这一点。否则,您可以发出 !purge 命令来踢出所有时间戳大于 7 天的人。
    • 请记住,如果您决定为其创建一个事件,那么当您让机器人离线太长时间时,可能会导致意外结果。如果您的机器人有 99.99% 的时间都在运行,我只会建议将自动踢球作为一项活动
    猜你喜欢
    • 2021-09-17
    • 2022-01-04
    • 1970-01-01
    • 2021-02-24
    • 2021-04-20
    • 1970-01-01
    • 2022-01-18
    • 2021-09-20
    • 2020-09-22
    相关资源
    最近更新 更多