【问题标题】:How should the value of the after attribute for the operation .logs_from() be formatted?.logs_from() 操作的 after 属性值应该如何格式化?
【发布时间】:2023-03-30 09:47:01
【问题描述】:

我正在尝试从我的机​​器人有权访问的所有渠道中检索今天(如运行脚本当天)发送的所有消息的可迭代项。

就目前而言,我一直在尝试使用.logs_from()after 属性,但是我似乎无法让它按照我的意愿行事:

import discord
import asyncio
import time

client = discord.Client()

today = time.strftime("%Y-%m-%d")

@client.event
async def on_ready():
    for i in client.get_all_channels():
        async for c in client.logs_from(i, after=today):
            print(c.content)

client.run(INSERT_SESSION_KEY)

运行它似乎只是从我的机器人可以访问的频道中输出所有消息的列表。我假设我输入的 after 值的格式不正确,但文档仅说明:

after (Message or datetime) – 所有返回的消息必须在该消息或日期之后。如果提供了日期,则它必须是代表 UTC 时间的时区原始日期时间。

我的印象是我在做什么。

是否有人能够建议为.logs_from() 声明after 属性值的正确方法是什么?

【问题讨论】:

  • 尝试使用 datetime 对象代替时间。粗略搜索here 建议datetime.combine(date.today(), time())
  • 完美,可以抓取在当前时间之后发送的任何消息,包括一天中的时间,因为今天仅使用 date.today() 发送的消息可以满足我的需要!
  • 我无法判断以下信息是否适用于您的情况。虽然日期时间最终必须是时区天真,但也许您输入的日期时间来自不同的时区?那么 pendulum 库可能对你有用。
  • @BillBell 我已经更新了我的答案以反映,谢谢!
  • 不客气!

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


【解决方案1】:

感谢https://stackoverflow.com/users/8360823/squaswin 的建议。 感谢https://stackoverflow.com/users/131187/bill-bell 指出UTC 时区差异。

使用datetime 而不是time 似乎可以按要求工作。

见下文:

import discord
import asyncio
import datetime

client = discord.Client()

@client.event
async def on_ready():
    for i in client.get_all_channels():
        async for c in client.logs_from(i, after=date.today()):
            print(c.content)

client.run(INSERT_SESSION_KEY)

上面返回今天发送的所有消息。

要包含一天中的特定时间,请使用以下作品:

import discord
import asyncio
import datetime

client = discord.Client()

@client.event
async def on_ready():
    for i in client.get_all_channels():
        async for c in client.logs_from(i, after=datetime.now()):
            print(c.content)

client.run(INSERT_SESSION_KEY)

但是,以上两个都返回当前时区,要以 UTC 格式获取当前日期,您可以使用以下命令:

import discord
import asyncio
import datetime

client = discord.Client()

@client.event
async def on_ready():
    for i in client.get_all_channels():
        async for c in client.logs_from(i, after=datetime.utcnow().date()):
            print(c.content)

client.run(INSERT_SESSION_KEY)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2012-12-31
    相关资源
    最近更新 更多