lastmessageID 始终为空,除了我

Posted

技术标签:

【中文标题】lastmessageID 始终为空,除了我【英文标题】:lastmessageID always null except for me 【发布时间】:2021-01-21 20:51:10 【问题描述】:

演示文稿

目标:查找指定的最后一条消息的发送时间

如何:使用User的属性lastmessageID,获取该ID对应的消息,找到属性createdTimestamp

问题:我是唯一一个没有属性 lastmessageID 等于 null 的人,即使用户在几分钟前发送了消息

问题:它是来自我的编码还是来自 Discord.js?有没有办法绕过这个问题?

注意:我知道它已缓存:

当有人在机器人还活着的时候发送消息时,给出相同的结果。

为了测试,我召唤了一个机器人,以便在测试时给我一个“新鲜”的消息

代码示例

每个“...”都是为了保护个人数据

脚本

  function findID() 
    var IDarray = userm.users.map((user) => user.lastMessageID)
    console.log("IDarray: ", IDarray)
    var ID = IDarray[0]
    console.log("ID: ", ID)
    msg(ID)
  

  function msg(lastmsgID) 
    var lastmsg = message.channel.messages.fetch(lastmsgID).then(message => time(message)).catch(console.error);
  

  function time(msg)
    ...
  

  findID();


结果 和我一起

user:  [
  User 
    id: '...',
    bot: false,
    username: '...',
    discriminator: '....',
    avatar: '...',
    flags: UserFlags  bitfield: ... ,
    lastMessageID: '...',
    lastMessageChannelID: '...'
  
]
IDarray:  [ '...' ]
ID:  ...
<Wed Oct 07 2020 00:30:52 GMT+0200 (GMT+02:00)> : Recieved Message to ..., content /test <@!...>
Date as YYYY-MM-DD hh:mm:ss ==> 2020-10-07 00:30:54

结果 与任何人

user:  [
  User 
    id: '...',
    bot: false,
    username: '...',
    discriminator: '...',
    avatar: '...',
    lastMessageID: null,
    lastMessageChannelID: null,
    flags: UserFlags  bitfield: ... 
  
]
IDarray:  [ null ]
ID:  null
<Wed Oct 07 2020 00:26:44 GMT+0200 (GMT+02:00)> : Recieved Message to ..., content /test <@...>
Date as YYYY-MM-DD hh:mm:ss ==> NaN-aN-aN aN:aN:aN

如果您认为我可以改进这个问题,请不要犹豫告诉我! 感谢阅读!

【问题讨论】:

您说消息是在几分钟前发送的,但您从那时起是否重置了您的机器人? 我知道它被缓存了,即使有人在机器人还活着的时候发送消息也会给出相同的结果。为了测试,我召唤了机器人(例如!help),所以我在测试时总是有一个“新鲜”的消息 【参考方案1】:

尝试client.users.fetch('uid'); 获取用户,然后提取您需要的信息。这会从 Discord 中而不是从缓存中拉取更新用户。

【讨论】:

还是空【参考方案2】:

这是缓存的问题。如果消息是在机器人启动后发送的,机器人只会给出 lastMessage。您需要从所有渠道获取所有消息才能使其工作,或者在机器人启动后等待用户发布消息。

【讨论】:

以上是关于lastmessageID 始终为空,除了我的主要内容,如果未能解决你的问题,请参考以下文章

在集合形式外键始终为空

Web Api 中的自签名证书始终为空

@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null

使用 ViewModel 和 LiveData 递增变量的简单片段示例 - 变量始终为空

尝试使用 ajax 调用将 urdu 字符串视图发送到控制器,但它在控制时始终为空

SmartLocationLibrary 位置始终为空