# PyFibot

**Category:** Standalone_Bot
**Original Author:** Riku Lindblad (shrike@addiktit.net)

## Description
PyFibot is a modular IRC bot written in Python, designed to interact with and manage channels on IRC networks. It supports various commands for automation, information retrieval, and user interaction.

## Key Features
- **Command Handling**: Supports multiple commands like `.autoop`, `.bmi`, `.weather`, etc.
- **Auto-op Management**: Adds or removes auto-op rules for specific users in channels.
- **Weather Information**: Fetches weather data from various services.
- **RSS Feed Handling**: Manages and displays RSS feed updates.
- **Spotify URL Parsing**: Parses and handles Spotify URLs.
- **Module System**: Extensible via numerous modules, each handling different functionalities.

## File Analysis
- **ez_setup.py** — Bootstrapping script for setuptools installation.
- **run.sh** — Script to run the bot with necessary environment setup.
- **setup.py** — Setup configuration for packaging and installing PyFibot.
- **test.sh** — Test script using coverage to record new VCR tests.
- **validate.py** — Validates the configuration file against a schema.
- **conf.py** — Sphinx documentation build configuration.
- **make.bat** — Batch script for building documentation.
- **botcore.py** — Core bot functionality, including command handling and logging.
- **colorlogger.py** — Custom logger with color support.
- **pyfibot.py** — Main entry point of the bot, containing initialization logic.
- **__init__.py** — Initialization for standard modules.
- **module_autoop.py** — Manages auto-op rules in channels.
- **module_autorejoin.py** — Rejoins a channel after being kicked.
- **module_bmi.py** — Calculates and displays Body Mass Index (BMI).
- **module_fmi.py** — Fetches weather data from FMI (Finnish Meteorological Institute).
- **module_geoip.py** — Determines the user's country based on their IP address.
- **module_matkahuolto.py** — Tracks shipments using Matkahuolto service.
- **module_openweather.py** — Fetches and displays weather data from OpenWeatherMap.
- **module_posti.py** — Tracks shipments using Posti service.
- **module_rss.py** — Manages RSS feed subscriptions and updates.
- **module_spotify.py** — Parses and handles Spotify URLs.
- **module_tvmaze.py** — Fetches TV show information from TheTVDB API.
- **module_update.py** — Updates the bot's source code from Git.
- **module_urlsize.py** — Warns about large files encountered in messages.
- **module_urltitle.py** — Displays HTML page titles for URLs.
- **module_usertrack.py** — Tracks user activity and IP addresses.
- **module_webchat.py** — Displays webchat users' hostnames on join.
- **module_wolfram_alpha.py** — Fetches information from Wolfram Alpha API.
- **module_ask.py** — Provides answers to simple questions using external APIs.
- **module_autoop_old.py** — Older version of auto-op management.
- **module_calc.py** — Performs basic mathematical calculations.
- **module_dhl.py** — Tracks shipments using DHL service.
- **module_expl.py** — Provides random explanations for terms or phrases.
- **module_forecast.py** — Fetches weather forecasts from Yahoo Weather API.
- **module_imgur.py** — Uploads images to Imgur.
- **module_nugget.py** — Retrieves and displays random nuggets of wisdom.
- **module_oraakkeli.py** — Asks questions from the Oracle service.
- **module_pgsqlwanha.py** — Manages URLs in a PostgreSQL database.
- **module_sqlitewanha.py** — Manages URLs in an SQLite database.
- **module_tvrage.py** — Fetches TV show information from TVRage API.
- **module_urlsafety.py** — Checks the safety of URLs using UnmaskParasites service.
- **__init__.py** — Initialization for utility modules.
- **dictdiffer.py** — A dictionary difference calculator.
- **find_config_opts.py** — Script to find configuration options in code.
- **imgur_auth.py** — Authorizes access to Imgur API.
- **pyfiurl.py** — Finds absolute URLs from strings.
- **twitter_application_auth.py** — Authorizes access to Twitter API.
- **bot_mock.py** — Mock bot for testing purposes.
- **conftest.py** — Configuration and fixtures for tests.
- **test_areena.py** — Test script for module_urltitle with Areena feed.
- **test_example.py** — Example test scripts.
- **test_openweather.py** — Test script for module_openweather.
- **test_pyfiurl.py** — Test script for pyfiurl functionality.
- **test_rss.py** — Test script for module_rss.
- **test_spotify.py** — Test script for module_spotify.
- **test_urltitle.py** — Test script for module_urltitle.
- **test_wikipedia.py** — Test script for module_urltitle with Wikipedia feed.
- **test_wolfram_alpha.py** — Test script for module_wolfram_alpha.