繁体   English   中英

如何获取某个用户发送的最后 1000 条消息?

[英]How can I get the last 1000 messages sent by a certain user?

我试过channel.fetchMessages() ,但限制是 100 条消息。 它适用于应该使用机器学习来模拟用户的机器人。

考虑到@jsejcksn 提到的速率限制以及如何获取通道消息,这是它的工作实现:

示例实现 在 Fusebit 中运行
let messagesCounter = 0;
const channel = await findChannel(discordClient);
// Channel messages are limited up to 100 messages per request.
const channelMessages = await getMessages(discordClient, channel.id);
// Accumulate fetched messages
let fetchedMessages = channelMessages;
// Fetch discord until you get MAX_NUMBER_OF_MESSAGES (1000)
let newMessages = channelMessages;
// If messages are returned, keep getting more until having 1000 messages
while (newMessages.length && messagesCounter < MAX_NUMBER_OF_MESSAGES) {
  // Keep a counter to prevent an infinite loop
  messagesCounter += channelMessages.length;
  // Using the before filter, you can get oldest messages by using the last returned message
  const oldestMessage = newMessages[channelMessages.length - 1];
  newMessages = await getMessages(discordClient, channel.id, oldestMessage.id);
  fetchedMessages = fetchedMessages.concat(newMessages);
}
// Return all the channel messages (up to 1000 messages!)
ctx.body = `There are ${fetchedMessages.length} messages in the ${DISCORD_CHANNEL_NAME} channel`;

根据返回的消息,您可以轻松地按用户 ID 过滤

返回消息的限制为100条,默认为50条。 有关详细信息,请参阅实际的API 文档

默认情况下,您会获取最新消息,但您可以在获取消息时指定其他查询条件 您需要重复获取请求,每次调整查询条件,以便连续收集较旧的消息。 在每个请求之后,您可以分析到目前为止收集的内容,以确定是否需要继续获取。

当心速率限制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM