【问题标题】:Discord py - How to check if creating date is below 10 minutes?Discord py - 如何检查创建日期是否低于 10 分钟?
【发布时间】:2021-04-21 13:53:36
【问题描述】:

如何检查创建的服务器邀请是否低于 10 分钟?我尝试制作一个列表,打印 10 分钟前创建的每个邀请,但它什么也没打印。

我试过了:

invites = await ctx.guild.invites()
for invite in invites:
    if (time.time() - invite.created_at.timestamp()) < 600:
        print(invite)

我补充说:

@bot.event
async def on_invite_create(invite):
    print(invite.created_at.timestamp())
    print(time.time())
    print(time.time() - invite.created_at.timestamp())

这就是打印的结果(新创建的邀请):

1619006499.447825
1619013699.5136192
7200.065812826157

【问题讨论】:

  • 可能是因为您没有邀请?这是我唯一能看出这段代码可能有问题的地方。
  • 我创建了很多邀请。我注意到使用此代码创建的邀请(&lt; 600 部分除外)的时间戳为 7200,我不明白为什么。
  • 我不确定discord.py 是如何工作的,但我会尝试打印出每个邀请的invite.created_at.timestamp() 和当前的time.time() 以进行调试,看看是否是问题所在.

标签: python python-3.x datetime discord.py python-datetime


【解决方案1】:

discord.Guild.invites() method 返回discord.Invite objects 的列表。每个discord.Invite 对象都有一个attribute created_at,它以datetime.datetime object 形式返回创建邀请的时间。这与time.time() 不同,后者只是一个浮点数。因此,您应该使用datetime.datetime.now()datetime.datetime 对象的形式获取当前时间。

import datetime

invites = await ctx.guild.invites()
for invite in invites:
    if (datetime.datetime.now() - invite.created_at).total_seconds() < 600:
        print(invite)

或者,您可以使用datetime.timedelta() 来比较时间差异。

for invite in await ctx.guild.invites():
    if datetime.datetime.now() - invite.created_at < datetime.timedelta(minutes=10):
        print(invite)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多