# PieSpy 0.4.0

**Category:** Standalone_Bot
**Original Author:** Paul Mutton

## Description
PieSpy is a standalone IRC bot that generates social network diagrams of user interactions on one or more IRC channels by analyzing messages and inferring relationships between users.

## Key Features
- **InferenceHeuristics**: Uses multiple heuristics to infer relationships from IRC messages.
  - DirectAddressingInferenceHeuristic: Infers edges based on direct mentions in messages.
  - IndirectAddressingInferenceHeuristic: Infers edges based on indirect mentions in messages.
  - AdjacencyInferenceHeuristic: Infers edges based on adjacency in message sequences.
  - BinarySequenceInferenceHeuristic: Infers edges based on binary sequences of interactions.
- **Graph Construction**: Constructs a graph to represent the social network, with nodes and weighted edges representing users and their relationships.
- **Configuration Management**: Configurable settings for output directory, image dimensions, colors, and inference heuristics weights.
- **Bot Control**: Allows controlling the bot via private messages using commands like `stats`, `join`, `part`, `ignore`, and `draw`.
- **Temporal Decay**: Implements temporal decay to ensure old relationships fade over time.

## File Analysis
- **run.bat** — Executes the Java application with the specified configuration file.
- **run.sh** — A shell script for executing the Java application, setting headless mode.
- **config.ini** — Configuration settings for server details, output directory, colors, and inference heuristics weights.
- **README.txt** — Documentation on how to use PieSpy, including command-line controls.
- **AdjacencyInferenceHeuristic.java** — Implements an inference heuristic based on adjacency in message sequences.
- **BinarySequenceInferenceHeuristic.java** — Implements an inference heuristic based on binary sequences of interactions.
- **Configuration.java** — Manages configuration settings for the bot.
- **DirectAddressingInferenceHeuristic.java** — Implements an inference heuristic based on direct mentions in messages.
- **Edge.java** — Represents edges in the graph, storing source and target nodes with weights.
- **Graph.java** — Manages the graph structure, adding nodes and edges, and processing inference heuristics.
- **IndirectAddressingInferenceHeuristic.java** — Implements an inference heuristic based on indirect mentions in messages.
- **InferenceHeuristic.java** — Abstract class for implementing inference heuristics.
- **Node.java** — Represents nodes in the graph, storing nicknames, weights, and positions.
- **SocialNetworkBot.java** — The main bot implementation extending PircBot to handle IRC interactions and graph construction.
- **TestMain.java** — A test harness for the bot, simulating IRC messages.