From f5cdf1b1ffb15394245da874898e8a0ea8f613da Mon Sep 17 00:00:00 2001 From: rambros Date: Tue, 10 Mar 2026 23:16:56 +0530 Subject: [PATCH] minor fix "start from message id" --- src/core/backup_reader.py | 4 ++-- src/core/discord_reader.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/backup_reader.py b/src/core/backup_reader.py index 692f93b..622eb40 100644 --- a/src/core/backup_reader.py +++ b/src/core/backup_reader.py @@ -1,7 +1,7 @@ """ BackupReader — discord.py-compatible local data provider. -Reads from local backup JSON files (produced by DiscordExporter) instead of the +Reads from local backup JSON files (produced by Reaper) instead of the Discord API. Implements the same public interface as DiscordReader so that migration scripts and UI code can use either provider transparently. """ @@ -964,7 +964,7 @@ class BackupReader: for m in messages: msg_id = int(m["messageID"]) - if after_id and msg_id <= after_id: + if after_id and msg_id < after_id: continue yield self._hydrate_message(m, channel_id) diff --git a/src/core/discord_reader.py b/src/core/discord_reader.py index ec259b7..b3dd586 100644 --- a/src/core/discord_reader.py +++ b/src/core/discord_reader.py @@ -217,7 +217,8 @@ class DiscordReader: """Yields messages from a given channel, optionally handling pagination.""" channel = await self.get_channel(channel_id) if isinstance(channel, discord.TextChannel) or isinstance(channel, discord.Thread): - after = discord.Object(id=after_id) if after_id else None + # Discord's 'after' is exclusive. To make it inclusive, we use after_id - 1. + after = discord.Object(id=after_id - 1) if after_id else None logger.info(f"Fetching message history for {channel.name} ({channel.id}) oldest_first=True after={after_id}") # To avoid exploding RAM, we yield items one by one async for message in channel.history(limit=limit, oldest_first=True, after=after):