簡體   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