Python 将“幽灵”用户踢入不和谐状态

Python 将“幽灵”用户踢入不和谐状态,python,discord,discord.py,Python,Discord,Discord.py,我不知道如何创建一个函数或其他东西来验证一个用户在一段时间内没有向discord服务器发送任何内容,并因为该用户处于活动状态而将其踢出。这和删减用户不同,因为删减会踢那些当时没有登录的用户 我使用的是Rapptz中的discord.py,但是如果可能的话,您可以在您想要的任何包装中给我一个示例。如果您正在重写,您可以使用历史异步迭代器来查找用户的最后一条消息 来自文档的示例 counter = 0 # Limit is not required, but can make this a real

我不知道如何创建一个函数或其他东西来验证一个用户在一段时间内没有向discord服务器发送任何内容,并因为该用户处于活动状态而将其踢出。这和删减用户不同,因为删减会踢那些当时没有登录的用户


我使用的是Rapptz中的discord.py,但是如果可能的话,您可以在您想要的任何包装中给我一个示例。

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

来自文档的示例

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秒执行一次

如果您不使用“重写”,或者您使用的服务器有很多成员,则后者可能是理想的

如果您使用on_消息来处理时间戳,您可以这样实现它

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

我不想打扰你,但是,我是这个API的新手,不知道该把代码放在哪里。如果我将它放在每条消息的@bot.event中,它会显示一个错误。如果我把它放在准备好的位置上,它也会显示一个错误。我试图搜索示例等,但没有成功。很抱歉,回复太晚。我不知道您是否仍在遵循此线程,但您不应该将其用于on_ready事件,因为它只在引导时运行。您应该使用on_message事件或在某个命令中使用。如果您向我展示您的代码,它将帮助我解决您的问题。我创建了一个带有用户id和服务器id的sqlite3数据库,其中包含用户最后一条消息的日期。我也看到了服务器的所有成员,如果该成员不在用户数据表中,我只插入一次实际日期。所以,7天后,我踢那些不发送任何消息的用户。所以你应该使用on_message event。每次出现消息时,都应使用新日期更新日期列。如果你想让它正好在7天,它踢用户,你需要在事件循环中创建一个事件。在这方面我帮不了你,你得看看asyncio库才能知道怎么做。否则,你可能会犯错误!purge命令将时间戳大于7天的所有人踢出。请记住,如果您确实决定为其创建事件,则当您让bot脱机太长时间时,可能会导致意外结果。如果你的机器人99.99%的时间都在运行,我只建议将自动踢作为一项活动