Skip to content

About

It's just a little extension to fix my internet which looks extremely broken. đŸ€”

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

SorryIDHMoney

SorryIDHMoney

Extension Chromium (MV3) qui enrichit les sites d’anime, de streaming et quelques usages du quotidien.

« Euhh ! On a pas beaucoup d’argent ^^ »

Manifest V3 Chromium Sans dépendances


Sommaire


Installation

L’extension n’est pas publiĂ©e sur le Chrome Web Store – elle se charge en mode dĂ©veloppeur.

git clone https://github.com/pedrokarim/SorryIDHMoney.git
cd SorryIDHMoney
cp manifest.example.json manifest.json

Puis dans le navigateur :

  1. Ouvrir chrome://extensions (ou brave://extensions, edge://extensions)
  2. Activer Mode développeur
  3. Charger l’extension non empaquetĂ©e → sĂ©lectionner le dossier du dĂ©pĂŽt

manifest.json est gitignored : c’est ta copie locale, libre de diverger. manifest.example.json est la rĂ©fĂ©rence versionnĂ©e – aprĂšs un git pull, compare les deux et reporte les nouvelles entrĂ©es (permissions, content scripts). Recharge l’extension aprĂšs tout changement de permissions, Chrome ne les prend pas Ă  chaud.


Fonctionnalités

Boutons MAL / AniList / Info

Sur une page d’anime, trois boutons flottants apparaissent :

Bouton Action
đŸ”” MyAnimeList Ouvre la fiche correspondante sur MAL
🟱 AniList Ouvre la fiche correspondante sur AniList
🟣 Info Popover avec banniĂšre, cover, titre, genres, prochain Ă©pisode, synopsis et liens

Le titre est extrait en prioritĂ© depuis le JSON-LD de la page, avec repli sur le DOM. AniList est la source de vĂ©ritĂ© pour toutes les donnĂ©es ; le service worker les met en cache 10 minutes.

Plateformes de streaming supportées :


Voiranime

Crunchyroll

ADKami

ADN

Gum Gum
🎬
Mavanimes

Mode Ă©dition – depuis la popup, il permet de corriger Ă  la main l’URL associĂ©e Ă  un anime mal dĂ©tectĂ©, ou de l’ignorer complĂštement. Les corrections sont conservĂ©es en local (chrome.storage.local) et rĂ©utilisĂ©es ensuite.

Navigation entre bases de données

Sur MyAnimeList, AniList et Nautiljon, un bouton permet de sauter d’une base Ă  l’autre pour la mĂȘme Ɠuvre (animes comme mangas), avec recherche automatique de la correspondance.

Mavanimes

Le support le plus poussé, en plus des boutons :

  • Barre de recherche intĂ©grĂ©e
  • Navigation entre Ă©pisodes (boutons flottants ← / →, l’existence de l’épisode est vĂ©rifiĂ©e avant affichage)
  • Bouton 📋 de retour Ă  la liste des Ă©pisodes

YouTube

Option Ce qu’elle fait
Lecture fluide des vidĂ©os Recharge une seule fois une page vidĂ©o qui dĂ©marre figĂ©e (play/pause immĂ©diat, timer bloquĂ© Ă  0). Chaque ID n’est rechargĂ© qu’une fois, mĂ©morisĂ© en sessionStorage – anti-boucle garanti.
Auto-scroll des Shorts Passe au Short suivant Ă  la fin de la lecture. ParamĂ©trable : nombre de replays avant de scroller (0–50) et dĂ©lai avant scroll (0–10 000 ms).

Twitch

  • Collecte automatique des channel points (la bulle est cliquĂ©e toute seule)
  • Page Statistiques dĂ©diĂ©e : total collectĂ©, dĂ©tail par chaĂźne, historique, suivi en temps rĂ©el

Bypass vĂ©rification d’ñge

Port sur Chromium de deux projets Firefox/Tampermonkey – l’API webRequest.filterResponseData() dont ils dĂ©pendent n’existe pas sur Chromium, elle est remplacĂ©e par des rĂšgles declarativeNetRequest et des content scripts en MAIN world.


Reddit
posts NSFW

AliExpress
flou produits

Bluesky
sensible

X / Twitter
sensible

AgeChecker

AgeGO

AgeVerif

Veriff

Un toggle maĂźtre plus un sous-toggle par site. Le statut du bypass X (hooks installĂ©s, erreurs) est consultable dans la popup quand l’onglet actif est X ; une pastille sur la page elle-mĂȘme est disponible en option (dĂ©sactivĂ©e par dĂ©faut).

📖 DĂ©tail des mĂ©canismes, correspondance avec l’upstream et limites connues : scripts/avb/README.md

Publication X

PrĂ©pare, publie ou programme des publications sur x.com depuis un outil local. CoupĂ© par dĂ©faut – il faut cocher la case et renseigner un jeton.

# 1. Générer un jeton dans les options de l'extension, puis lancer le pont
node tools/xposter-server.js --token MONJETON --port 8787

# 2. Déposer un ordre depuis un autre terminal
node tools/xposter-cli.js programmer --fichier post.json --token MONJETON
node tools/xposter-cli.js maintenant --fichier post.json --token MONJETON
node tools/xposter-cli.js lister   --token MONJETON
node tools/xposter-cli.js annuler  --id p123 --token MONJETON
node tools/xposter-cli.js capturer --sortie ecran.png --token MONJETON
node tools/xposter-cli.js tweets   --compte moncompte --sortie fil.json --token MONJETON
Format du fichier de publication
{
  "texte": "Your anime list, as one image.\n\n→ cma.ascencia.re",
  "images": ["./assets/hero.png"],
  "alts": ["Mur incliné de jaquettes d'anime
"],
  "quand": "2026-08-20T14:00:00+02:00",
  "publier": false
}

Le CLI encode les images en base64 (le navigateur ne peut pas lire le disque). X accepte 4 images maximum – au-delà, le CLI refuse plutît que de tronquer en silence.

Quatre gardes :

  1. Module décoché par défaut
  2. Sans jeton renseignĂ©, l’extension ne contacte mĂȘme pas le serveur
  3. Liste blanche d’actions (ping, programmer, annuler, lister, maintenant) – jamais de code arbitraire
  4. La publication automatique a sa propre case, dĂ©cochĂ©e : un ordre peut rĂ©clamer publier: true, sans cette case l’extension prĂ©pare le composeur et laisse le clic final Ă  l’humain

Le serveur Ă©coute sur 127.0.0.1 exclusivement, jeton exigĂ© Ă  chaque requĂȘte.

⚠ Ce module ne parle pas Ă  l’API de X et ne connaĂźt aucun identifiant : il pilote l’interface dans un onglet dĂ©jĂ  connectĂ©. C’est contraire aux rĂšgles d’automatisation de X – le mode « prĂ©parer », qui laisse le clic final Ă  l’humain, est celui qui reste dans les clous.

Pourquoi un sondage HTTP et pas un WebSocket ?

En MV3 le service worker est arrĂȘtĂ© dĂšs qu’il n’a rien Ă  faire : une connexion permanente ne tient pas. Une alarme le rĂ©veille chaque minute, il demande s’il y a du travail. Une minute d’attente n’a aucune importance pour programmer une publication, et ça Ă©vite d’implĂ©menter le protocole WebSocket Ă  la main dans un projet sans dĂ©pendances.

La file d’attente vit dans l’extension, pas dans le serveur : une publication programmĂ©e part mĂȘme si l’outil qui l’a dĂ©posĂ©e est Ă©teint.

Pont navigateur

Laisse un outil local – une IA, un script – lire le web Ă  travers ce navigateur quand une requĂȘte directe se fait refouler (pas de session, pas de JavaScript, empreinte de robot). Lecture seule, et coupĂ© par dĂ©faut : il faut cocher la case et gĂ©nĂ©rer un jeton.

# Une seule fois : générer un jeton dans les options (Pont navigateur), puis
node tools/browser-server.js --token MONJETON

# Ensuite, sans argument – le CLI retrouve le jeton et relance le serveur au besoin
node tools/browser-cli.js read --url https://exemple.fr/article
node tools/browser-cli.js read --url https://exemple.fr --selector "main" --format text
node tools/browser-cli.js query --url https://exemple.fr --selector "h2 a" --limit 20
node tools/browser-cli.js screenshot --url https://exemple.fr --selector ".prix" --out prix.png
node tools/browser-cli.js network --tab 123 --filter /api/
node tools/browser-cli.js fetch --url https://exemple.fr/api/items.json
node tools/browser-cli.js tabs

# Lectures plus poussées
node tools/browser-cli.js read --url https://exemple.fr --scroll --frames
node tools/browser-cli.js screenshot --url https://exemple.fr --full --out page.png
node tools/browser-cli.js inspect --url https://exemple.fr --filter /api/ --bodies --console
node tools/browser-cli.js storage --tab 123
Action Ce qu’elle rend
read Le contenu de la page ou d’un Ă©lĂ©ment, en Markdown (dĂ©faut), texte ou HTML. --scroll fait dĂ©filer avant de lire, --frames lit aussi les iframes
query Les éléments qui correspondent à un sélecteur CSS : texte, attributs, position
screenshot Une capture PNG de la partie visible, d’un seul Ă©lĂ©ment, ou de la page entiĂšre (--full 🔧)
network Les requĂȘtes faites par la page : adresse, type, statut, poids
inspect 🔧 Les requĂȘtes complĂštes (mĂ©thode, corps envoyĂ©, en-tĂȘtes et corps reçus sur demande) et la console
storage đŸ—ïž localStorage, sessionStorage et cookies lisibles par la page
fetch Le corps d’une adresse (GET), avec la session du navigateur
tabs · open · close Lister les onglets, en ouvrir un, refermer un onglet ouvert par le pont

Une lecture vise --url (ouvre en arriĂšre-plan, lit, referme), --tab ID (un onglet dĂ©jĂ  ouvert) ou, sans rien, l’onglet actif.

🔧 demande la case Autoriser le dĂ©bogueur : Chrome affiche un bandeau pendant l’opĂ©ration, et certains sites anti-robots le dĂ©tectent. đŸ—ïž demande la case Autoriser la lecture du stockage. Les deux sont dĂ©cochĂ©es par dĂ©faut, parce qu’elles exposent cookies et jetons de session.

Suivre ce qui se passe :

  • Une pastille se pose sur chaque onglet lu qui reste ouvert. Elle se dĂ©place Ă  la souris, se souvient de sa place, et un clic dĂ©roule ce qui a Ă©tĂ© relevĂ© sur ce site. Les lectures et les captures l’ignorent. DĂ©sactivable dans les options.
  • L’écran Pont navigateur (depuis la popup) tient le journal complet : action, page, rĂ©sultat, durĂ©e, vignette des captures, avec filtre, recherche et pagination.
  • La popup affiche l’état du pont et les derniĂšres lectures.

Cinq gardes :

  1. Module décoché par défaut
  2. Sans jeton renseignĂ©, l’extension ne contacte mĂȘme pas le serveur
  3. Liste blanche d’actions, toutes en lecture – ni clic, ni saisie, ni code arbitraire
  4. Sites bannis (options) : jamais ouverts, lus, photographiĂ©s ni listĂ©s, sous-domaines et redirections compris. C’est l’extension qui applique la liste, pas l’outil qui demande
  5. Le débogueur et la lecture du stockage ont chacun leur case, décochée

⚠ Tant que le module est actif, tout programme de la machine qui connaĂźt le jeton peut lire les pages de ce navigateur avec tes sessions ouvertes. Bannis ce qui ne doit pas l’ĂȘtre (banque, impĂŽts, messagerie) et coupe le module quand il ne sert pas.

Limites connues : sans le dĂ©bogueur, network ne voit ni la mĂ©thode, ni les en-tĂȘtes, ni les corps (API Performance), et les captures s’arrĂȘtent Ă  l’écran visible ; storage ne voit pas les cookies HttpOnly ; query, network et storage ne lisent que le cadre principal.

Confort général

  • RĂ©autorise le dĂ©filement quand une page force overflow: hidden sur le <body>
  • Retire les overlays de consentement cookies / 18+ bloquants
  • Notifications toast discrĂštes pour les actions de l’extension

Interfaces

Page RĂŽle
Popup Point d’entrĂ©e : statut X, accĂšs rapide aux pages, bascule du mode Ă©dition
ParamÚtres Tous les réglages, groupés et repliables
Gestionnaire d’animes Liste des URL corrigĂ©es Ă  la main et des animes ignorĂ©s
Statistiques Twitch Points collectés, détail par chaßne, historique
Publication X File d’attente, historique, Ă©tat du pont local
Pont navigateur État du pont et journal de tout ce qui a Ă©tĂ© lu
À propos Version et informations
Testeur de toasts Outil de dev pour prévisualiser les notifications

Configuration

Accessible via la popup → Paramùtres, ou par la page d’options de l’extension.

GĂ©nĂ©ral – couleur de fond, censure, et 8 thĂšmes : Clair, Sombre, Violet, OcĂ©an, ForĂȘt, Coucher de soleil, Cerisier, Minuit (avec aperçu en direct).

Boutons de switch – MyAnimeList, AniList, dĂ©sactivation des animations.

Plateformes de streaming – un toggle par site.

YouTube – lecture fluide, auto-scroll des Shorts, replays et dĂ©lai.

FonctionnalitĂ©s – rewards Twitch, notifications toast.

Bypass vĂ©rification d’ñge – toggle maĂźtre + un par site.

Publication X – activation, autorisation de publier, port et jeton du pont local.

Pont navigateur – activation, port, jeton, pastille sur les pages, autorisations du dĂ©bogueur et du stockage, liste des sites bannis.


Raccourcis clavier

Raccourci Action OĂč
Ctrl + ← / → Épisode prĂ©cĂ©dent / suivant Mavanimes
Ctrl + L Retour à la liste des épisodes Mavanimes
Échap Fermer le popover d’info / le mode Ă©dition Partout

Architecture

SorryIDHMoney/
├── background.js              # Service worker : cache AniList (10 min), routage des actions
├── manifest.example.json      # RĂ©fĂ©rence versionnĂ©e (manifest.json est gitignored)
├── icons/
│   └── platforms/             # Logos des plateformes (PNG, SVG, WebP, ICO)
├── interfaces/                # Pages HTML de l'extension + leurs scripts
├── libs/                      # Modules partagĂ©s (toast-manager
)
├── scripts/
│   ├── utils.js               # Boutons, popover info, mode Ă©dition, animations
│   ├── anime-cache-manager.js # URL personnalisĂ©es et animes ignorĂ©s (storage.local)
│   ├── *-content.js           # Un content script par plateforme
│   ├── avb/                   # Bypass vĂ©rification d'Ăąge (+ son propre README)
│   │   └── spoofs/            # SDK des vĂ©rificateurs, remplacĂ©s via DNR
│   ├── xposter-*.js           # Module Publication X (content, file, pont, relecture)
│   └── browser-*.js           # Module Pont navigateur (pont, relevĂ©s, pastille, journal, dĂ©bogueur)
├── styles/                    # base.css (design tokens) + une feuille par interface
└── tools/                     # Ponts locaux : Publication X et Pont navigateur (Node, sans deps)

Permissions demandĂ©es : storage, unlimitedStorage, activeTab, scripting, declarativeNetRequest, alarms, tabs, downloads, debugger (pont navigateur, utilisĂ©e seulement si sa case est cochĂ©e), et host_permissions: <all_urls> – requis pour que les rĂšgles DNR de redirection s’appliquent quel que soit le site qui intĂšgre un vĂ©rificateur d’ñge.


Développement

Aucune Ă©tape de build, aucune dĂ©pendance : le code est chargĂ© tel quel par le navigateur. AprĂšs modification, recharger l’extension depuis chrome://extensions.

Conventions du projet :

  • Les content scripts loguent avec un prĂ©fixe explicite – [NomPlateforme]
  • AniList est la source de vĂ©ritĂ© pour les donnĂ©es anime
  • Toute nouvelle plateforme doit avoir son toggle dans les options, vĂ©rifiĂ© en dĂ©but de main()
  • manifest.json Ă©tant gitignored, toujours mettre Ă  jour manifest.example.json en parallĂšle
  • Les commits ne contiennent jamais de Co-Authored-By

📖 AGENTS.md documente le processus complet d’ajout d’une plateforme de streaming, Ă©tape par Ă©tape (inspection du DOM, logo, content script, manifest, toggle).


Contribution

Les contributions sont les bienvenues – bugs, idĂ©es de fonctionnalitĂ©s, pull requests. Pour une nouvelle plateforme, suivre le processus dĂ©crit dans AGENTS.md.


Licence

MIT.


Fait avec trop de temps libre et pas beaucoup d’argent.

About

It's just a little extension to fix my internet which looks extremely broken. đŸ€”

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages