# bxn4/ngl-spammer architecture

> Architecture diagram of the GitHub repository bxn4/ngl-spammer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bxn4/ngl-spammer
- Repository: https://github.com/bxn4/ngl-spammer

## Overview

NGL Spammer is a command-line tool that sends generated or supplied questions to configured NGL accounts. The main workflow reads account targets and options, optionally checks accounts, selects a question mode and content, submits up to 10 successful questions per account, then rotates accounts with a delay. README-documented modes are represented by their content files; the sampled source is partial, so uncertain implementation details are omitted. Runtime behavior is concentrated in one script rather than separate modules.

Main entry points: [`NGL_Spammer.py`](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py) (Question composition), [`accounts.txt`](https://github.com/bxn4/ngl-spammer/blob/main/accounts.txt) (Account targets), [`MD5.md5`](https://github.com/bxn4/ngl-spammer/blob/main/MD5.md5) (Account checksum), [`src/3words.txt`](https://github.com/bxn4/ngl-spammer/blob/main/src/3words.txt) (Three-word prompts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Inputs and checks"]
  node_cli["CLI options<br/>[NGL_Spammer.py]"]
  node_accounts["Account targets<br/>[accounts.txt]"]
  node_account_loading["Account loading<br/>[NGL_Spammer.py]"]
  node_account_check["Account check<br/>[NGL_Spammer.py]"]
  node_checksum["Account checksum<br/>[MD5.md5]"]
end

subgraph group_content["Question content"]
  node_three_words["Three-word prompts<br/>[3words.txt]"]
  node_confessions["Confessions<br/>[confessions.txt]"]
  node_dealbreaker["Dealbreaker prompts<br/>[dealbreaker.txt]"]
  node_names["Names<br/>[names.txt]"]
  node_never_have["Never-have prompts<br/>[neverhave.txt]"]
  node_questions["Custom questions<br/>[questions.txt]"]
  node_rizzme["Rizzme prompts<br/>[rizzme.txt]"]
  node_tbh["TBH prompts<br/>[tbh.txt]"]
end

subgraph group_runtime["Sending runtime"]
  node_question_mode["Mode selection<br/>[NGL_Spammer.py]"]
  node_question_building["Question composition<br/>[NGL_Spammer.py]"]
  node_question_send["Question submission<br/>[NGL_Spammer.py]"]
  node_rotation["Account rotation<br/>[NGL_Spammer.py]"]
end

subgraph group_external["External services"]
  node_ngl(("NGL service"))
end

node_user(("Operator"))

node_user -->|"sets options"| node_cli
node_user -->|"enters targets"| node_accounts
node_account_loading -->|"reads"| node_accounts
node_cli -->|"provides overrides"| node_account_loading
node_account_loading -->|"passes targets"| node_account_check
node_account_check -->|"reads and updates"| node_checksum
node_account_check -->|"checks accounts"| node_ngl
node_account_check -->|"removes invalid targets"| node_accounts
node_cli -->|"selects mode"| node_question_mode
node_question_mode -->|"selects content"| node_question_building
node_question_building -->|"reads"| node_three_words
node_question_building -->|"reads"| node_confessions
node_question_building -->|"reads"| node_dealbreaker
node_question_building -->|"reads"| node_names
node_question_building -->|"reads"| node_never_have
node_question_building -->|"reads"| node_questions
node_question_building -->|"reads"| node_rizzme
node_question_building -->|"reads"| node_tbh
node_question_building -->|"provides question"| node_question_send
node_rotation -->|"selects target"| node_question_mode
node_question_send -->|"submits question"| node_ngl
node_question_send -->|"reports result"| node_rotation

click node_cli "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_accounts "https://github.com/bxn4/ngl-spammer/blob/main/accounts.txt"
click node_account_loading "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_account_check "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_checksum "https://github.com/bxn4/ngl-spammer/blob/main/MD5.md5"
click node_question_mode "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_question_building "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_question_send "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_rotation "https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py"
click node_three_words "https://github.com/bxn4/ngl-spammer/blob/main/src/3words.txt"
click node_confessions "https://github.com/bxn4/ngl-spammer/blob/main/src/confessions.txt"
click node_dealbreaker "https://github.com/bxn4/ngl-spammer/blob/main/src/dealbreaker.txt"
click node_names "https://github.com/bxn4/ngl-spammer/blob/main/src/names.txt"
click node_never_have "https://github.com/bxn4/ngl-spammer/blob/main/src/neverhave.txt"
click node_questions "https://github.com/bxn4/ngl-spammer/blob/main/src/questions.txt"
click node_rizzme "https://github.com/bxn4/ngl-spammer/blob/main/src/rizzme.txt"
click node_tbh "https://github.com/bxn4/ngl-spammer/blob/main/src/tbh.txt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_accounts,node_account_loading,node_account_check,node_checksum toneBlue
class node_three_words,node_confessions,node_dealbreaker,node_names,node_never_have,node_questions,node_rizzme,node_tbh toneAmber
class node_question_mode,node_question_building,node_question_send,node_rotation toneMint
class node_ngl toneRose
class node_user toneIndigo
```

## Components

### Inputs and checks

- [CLI options](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Account targets](https://github.com/bxn4/ngl-spammer/blob/main/accounts.txt): `accounts.txt`
- [Account loading](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Account check](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Account checksum](https://github.com/bxn4/ngl-spammer/blob/main/MD5.md5): `MD5.md5`

### Question content

- [Three-word prompts](https://github.com/bxn4/ngl-spammer/blob/main/src/3words.txt): `src/3words.txt`
- [Confessions](https://github.com/bxn4/ngl-spammer/blob/main/src/confessions.txt): `src/confessions.txt`
- [Dealbreaker prompts](https://github.com/bxn4/ngl-spammer/blob/main/src/dealbreaker.txt): `src/dealbreaker.txt`
- [Names](https://github.com/bxn4/ngl-spammer/blob/main/src/names.txt): `src/names.txt`
- [Never-have prompts](https://github.com/bxn4/ngl-spammer/blob/main/src/neverhave.txt): `src/neverhave.txt`
- [Custom questions](https://github.com/bxn4/ngl-spammer/blob/main/src/questions.txt): `src/questions.txt`
- [Rizzme prompts](https://github.com/bxn4/ngl-spammer/blob/main/src/rizzme.txt): `src/rizzme.txt`
- [TBH prompts](https://github.com/bxn4/ngl-spammer/blob/main/src/tbh.txt): `src/tbh.txt`

### Sending runtime

- [Mode selection](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Question composition](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Question submission](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`
- [Account rotation](https://github.com/bxn4/ngl-spammer/blob/main/NGL_Spammer.py): `NGL_Spammer.py`

### External services

- **NGL service**

### Other components

- **Operator**

## Connections

- Operator → CLI options: sets options
- Operator → Account targets: enters targets
- Account loading → Account targets: reads
- CLI options → Account loading: provides overrides
- Account loading → Account check: passes targets
- Account check → Account checksum: reads and updates
- Account check → NGL service: checks accounts
- Account check → Account targets: removes invalid targets
- CLI options → Mode selection: selects mode
- Mode selection → Question composition: selects content
- Question composition → Three-word prompts: reads
- Question composition → Confessions: reads
- Question composition → Dealbreaker prompts: reads
- Question composition → Names: reads
- Question composition → Never-have prompts: reads
- Question composition → Custom questions: reads
- Question composition → Rizzme prompts: reads
- Question composition → TBH prompts: reads
- Question composition → Question submission: provides question
- Account rotation → Mode selection: selects target
- Question submission → NGL service: submits question
- Question submission → Account rotation: reports result
