diff --git a/main.py b/main.py index c931080..f79bf64 100644 --- a/main.py +++ b/main.py @@ -8,7 +8,7 @@ import asyncio from tgbridge.forwarder import TelegramForwarder from tgbridge.discord_to_telegram import DiscordToTelegramForwarder -from twitterbridge.rss import TwitterRSSForwarder +# from twitterbridge.rss import TwitterRSSForwarder load_dotenv('credentials.env') @@ -32,21 +32,21 @@ if os.getenv('DISCORD_CHANNEL_ID') and os.getenv('TELEGRAM_GROUP_ID'): if os.getenv('DISCORD_CHANNEL_ID_SHITPOST') and os.getenv('TELEGRAM_GROUP_ID_SHITPOST'): d_to_tg.add_route(int(os.getenv('DISCORD_CHANNEL_ID_SHITPOST')), int(os.getenv('TELEGRAM_GROUP_ID_SHITPOST'))) -twitter = TwitterRSSForwarder( - webhook_url=os.getenv('TWITTER_DISCORD_WEBHOOK'), -) +# twitter = TwitterRSSForwarder( +# webhook_url=os.getenv('TWITTER_DISCORD_WEBHOOK'), +# ) -twitter_mao = TwitterRSSForwarder( - webhook_url=os.getenv('TWITTER_DISCORD_WEBHOOK_MAO'), - guid_file='data/last_tweet_mao.txt', -) +# twitter_mao = TwitterRSSForwarder( +# webhook_url=os.getenv('TWITTER_DISCORD_WEBHOOK_MAO'), +# guid_file='data/last_tweet_mao.txt', +# ) @bot.event async def on_ready(): print(f'[+] {bot.user} is online!') asyncio.create_task(forwarder.start()) - asyncio.create_task(twitter.start()) - asyncio.create_task(twitter_mao.start()) + # asyncio.create_task(twitter.start()) + # asyncio.create_task(twitter_mao.start()) # Clear stale global slash commands try: await bot.tree.sync() @@ -69,7 +69,7 @@ async def main(): await bot.load_extension('cogs.gitpull') await bot.load_extension('cogs.currency_converter') await bot.load_extension('ai.ai_roleplay') - await bot.load_extension('twitterbridge.leaks_cmd') + # await bot.load_extension('twitterbridge.leaks_cmd') await bot.load_extension("rio.ssh_connection_rio") await bot.load_extension('blue_archive.gacha') await bot.load_extension('blue_archive.inventory') @@ -80,10 +80,10 @@ async def main(): await bot.start(os.getenv('DISCORD_TOKEN')) finally: await forwarder.stop() - twitter.stop() - twitter_mao.stop() - await twitter.close() - await twitter_mao.close() + # twitter.stop() + # twitter_mao.stop() + # await twitter.close() + # await twitter_mao.close() logging.basicConfig(level=logging.INFO) logging.getLogger('httpx').setLevel(logging.WARNING) diff --git a/twitterbridge/rss.py b/twitterbridge/rss.py index b01c414..d2e2f61 100644 --- a/twitterbridge/rss.py +++ b/twitterbridge/rss.py @@ -158,13 +158,27 @@ class TwitterRSSForwarder: logger.info('twitter rss first run — recorded guid: %s', self.last_guid) return - new_entries = [] - for entry in entries: - guid = entry.get('id', '') - if guid == self.last_guid: + # Find the index of the last known GUID in the current feed. + last_idx = None + for i, entry in enumerate(entries): + if entry.get('id', '') == self.last_guid: + last_idx = i break - new_entries.append(entry) + if last_idx is None: + # Stored GUID not in this feed — nitter returned a stale/partial + # snapshot. Update to the newest GUID *without* posting, so we + # don't spam the channel with duplicates when the full feed returns. + logger.warning( + 'stored guid %s not found in feed (%d entries) — ' + 'updating to %s without posting', + self.last_guid, len(entries), entries[0].get('id', '?'), + ) + self.last_guid = entries[0].get('id', '') + self._save_last_guid() + return + + new_entries = entries[:last_idx] # everything newer than last known if not new_entries: return