7.9 KiB
I wrote this bot in one night, while I'm recovering from two level cervical spinal surgery, CDA Cervical Discectomy and Disc Arthroplasty. Expect a lot of bugs.
Matrix Bot
Matrix Bot is a Python-based chat bot designed to work with Matrix, an open network for secure, decentralized communication. This bot is built using the simplematrixbotlib
library and provides various commands and functionalities for interacting with Matrix rooms.
Features
- Modular architecture: Commands are implemented as separate plugins, making it easy to add or modify functionality.
- Command handling: The bot listens for specific commands prefixed with
!
and responds accordingly. - Plugin system: Each command is implemented as a separate plugin module, allowing for easy customization and extension.
- Extensible: Users can add new commands by creating additional plugin modules.
Automatic Installation
Run the installation script
-
./install-funguy.sh
-
Launch the bot:
sudo systemctl start funguybot
Manual Installation
-
Create python venv
python3 -m venv venv
source venv/bin/activate
-
Clone the repository:
git clone https://gitlab.com/Eggzy/funguybot.git
-
Apply the patch
cp api.py.patch simplematrixbotlib
git apply api.py.patch
-
Install dependencies:
cd simplematrixbotlib && pip install .
cd ../ && pip install -r requirements.txt
-
Set up environment variables: Create/Edit
.env
file in the root directory of the bot and add the following variables:
MATRIX_URL="https://matrix.org" (or another homeserver)
MATRIX_USER=""
MATRIX_PASS=""
OPENWEATHER_API_KEY="" # Optional: For weather plugin
- Create systemd.service
Create
/etc/systemd/system/funguybot.service
Replace$working_directory
with your bot install path
[Unit]
Description=Funguy Bot Service
After=network.target
[Service]
Type=simple
User=$user
Group=$group
WorkingDirectory=$working_directory
ExecStart=$working_directory/start-funguy.sh
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=funguybot
[Install]
WantedBy=multi-user.target
EOF
- Launch Fungy
systemctl daemon-reload
systemctl enable funguybot
systemctl start funguybot
Usage
To use the bot, invite it to a Matrix room and interact with it by sending commands prefixed with !
. For example:
!date
: Display the current date and time.!fortune
: Get a random fortune message.!proxy
: Retrieve and test random SOCKS5 and HTTP proxies.!isup <domain/ip>
: Check if the specified domain or IP address is reachable.!karma <user>
: View or modify karma points for a user.!funguy <prompt>
Talk to the Tech AI LLM!music <prompt>
Talk to the music knowledge LLM!yt <search terms>
Search Youtube!weather New York
Get Weather information!ud <term>
Get Urban Dictionary definition!help
Get Help For a complete list of available commands and their descriptions, use the!commands
command.
🍄 Funguy Bot Commands 🍄
Plugin Documentation
Core Commands
🍄 !help Displays comprehensive help documentation for all available commands with usage examples.
🔌 !plugins Lists all loaded plugins along with their descriptions.
⏰ !date Displays the current date and time with proper ordinal formatting.
🃏 !fortune Returns a random fortune message using the fortune command.
Utility Commands
💻 !proxy Retrieves and tests random SOCKS5 proxies from public sources, showing latency and caching working proxies.
📶 !isup [domain/ip] Checks if a website or server is reachable, including DNS resolution and HTTP/HTTPS service checks.
☯ !karma [user] [up/down]
Manages karma points for users. View karma with !karma user
, increase with !karma user up
, decrease with !karma user down
.
🌧️ !weather [location] Fetches current weather information for any location using OpenWeatherMap API. Requires OPENWEATHER_API_KEY environment variable
📖 !ud [term] [index] Fetches definitions from Urban Dictionary. Use without arguments for random definition, or specify term and optional index.
AI & Generation Commands
🤖 AI Commands (!tech, !music, !eth, etc.) Multiple AI model commands that interface with local AI API. Each command uses specialized prompts for different domains:
!tech
- Technology assistance!music
- Music knowledge and recommendations!weather
- Weather information- And 100+ other specialized AI commands
📸 !sd [prompt] [options] Generates images using self-hosted Stable Diffusion with customizable parameters:
--steps
- Number of generation steps (default: 4)--cfg
- CFG scale (default: 2)--h
- Image height (default: 512)--w
- Image width (default: 512)--neg
- Negative prompt--sampler
- Sampler name (default: DPM++ SDE)
📄 !text [prompt] [options] Generates text using Ollama's Mistral 7B Instruct model:
--max_tokens
- Maximum tokens to generate (default: 512)--temperature
- Sampling temperature (default: 0.7)
Media & Search Commands
🎬 YouTube Commands
- Automatic preview when YouTube links are posted
!yt [search terms]
- Search for YouTube videos- Shows video info, description, and attempts to fetch lyrics
📰 !xkcd Fetches and displays a random XKCD comic.
Administration Commands
Admin only - requires admin_user configuration
🔧 !set [option] [value] Set configuration options (admin_user, prefix)
🔍 !get [option] Get configuration values
💾 !saveconf Save current configuration
📥 !loadconf Load saved configuration
👁️ !show Display current configuration
🔄 !reset Reset configuration to defaults
📤 !load [plugin] Load a plugin
📥 !unload [plugin] Unload a plugin
🔄 !reload Reload all plugins
🚫 !disable [plugin] [room_id] Disable a plugin for specific room
✅ !enable [plugin] [room_id] Enable a plugin for specific room
⚙️ !rehash Reload configuration
Cron System
⏱️ !cron [add|remove] [room_id] [cron_entry] [command] Schedule automated commands using cron syntax:
add
- Add a new cron jobremove
- Remove an existing cron job
Full AI Command List
The bot includes over 100 specialized AI commands covering various domains:
Creative & Writing: !write, !script, !author, !poem, !rap, !story, !comic, !motiv, !debate
Technical: !tech, !dev, !py, !php, !regex, !math, !web, !it, !security, !ai, !ml, !data, !game
Professional: !seo, !recruit, !coach, !devrel, !sales, !ceo, !mgmt, !startup, !invest, !fin
Educational: !tutor, !teach, !edu, !acad, !hist, !astro, !chem, !math, !psych
Lifestyle: !fit, !health, !diet, !cook, !travel, !art, !music, !film, !gaming
Specialized: !legal, !medical, !realest, !auto, !fashion, !design, !interior
And many more! Use !help
in chat to see the complete list with descriptions.
Configuration
The bot uses a TOML configuration file (funguy.conf
) for settings:
admin_user
- Matrix user ID with admin privilegesprefix
- Command prefix (default: "!")- Plugin-specific settings in
plugins/ai.json
for AI commands
Dependencies
- Python 3.7+
- simplematrixbotlib
- Various AI/ML services (Stable Diffusion, Ollama, etc.)
- Database support (SQLite)
- External APIs (OpenWeatherMap, Urban Dictionary, YouTube)
Troubleshooting
- Ensure all environment variables are set correctly
- Check that required services are running (Stable Diffusion API, Ollama, etc.)
- Verify plugin permissions and whitelist settings
- Check logs for detailed error information
Support
Join our Matrix room for support and community: Self-hosting | Security | Sysadmin | Homelab | Programming
Credits
🧙♂️ Creator & Developer: HB (@hashborgir:mozilla.org) 🍄 Funguy Bot - Created during recovery from cervical spinal surgery
Note: This bot was created rapidly and may contain bugs. Please report issues and contribute improvements!