CMDOP Bot - Multi-channel bot integrations for remote machine access
Project description
CMDOP Bots
Multi-channel bot integrations for remote machine access.
Control your servers via Telegram, Discord, or Slack. Simple, reliable, open-source.
📖 Read the article: PicoClaw and OpenClaw Are Not Infrastructure: The $10 AI Agent Myth
Install
pip install cmdop-bot
# With Telegram support
pip install cmdop-bot[telegram]
# With Discord support
pip install cmdop-bot[discord]
# With Slack support
pip install cmdop-bot[slack]
# With all channels
pip install cmdop-bot[all]
Quick Start
Telegram Bot
from cmdop_bots.channels.telegram import TelegramBot
bot = TelegramBot(
token="YOUR_TELEGRAM_BOT_TOKEN",
cmdop_api_key="YOUR_CMDOP_API_KEY",
allowed_users=[123456789], # Your Telegram user ID
machine="my-server", # Optional: target machine
)
bot.run()
Discord Bot
from cmdop_bots.channels.discord import DiscordBot
bot = DiscordBot(
token="YOUR_DISCORD_BOT_TOKEN",
cmdop_api_key="YOUR_CMDOP_API_KEY",
guild_ids=[123456789], # Optional: for faster command sync
)
bot.run()
Slack App
from cmdop_bots.channels.slack import SlackApp
app = SlackApp(
bot_token="xoxb-YOUR-BOT-TOKEN",
app_token="xapp-YOUR-APP-TOKEN",
cmdop_api_key="YOUR_CMDOP_API_KEY",
)
app.run()
Commands
| Channel | Command | Description |
|---|---|---|
| Telegram | /shell <cmd> |
Execute shell command |
| Telegram | /exec <cmd> |
Alias for /shell |
| Telegram | /agent <task> |
Run AI agent task |
| Telegram | /ls [path] |
List directory |
| Telegram | /cat <path> |
Read file |
| Telegram | /machine <host> |
Set target machine |
| Discord | /shell <cmd> |
Execute shell command |
| Discord | /agent <task> |
Run AI agent task |
| Discord | /ls [path] |
List directory |
| Discord | /cat <path> |
Read file |
| Discord | /machine <host> |
Set target machine |
| Discord | /status |
Show connection status |
| Slack | /cmdop shell <cmd> |
Execute shell command |
| Slack | /cmdop agent <task> |
Run AI agent task |
| Slack | /cmdop ls [path] |
List directory |
| Slack | /cmdop cat <path> |
Read file |
| Slack | /cmdop machine <host> |
Set target machine |
| Slack | /cmdop status |
Show connection status |
Features
Telegram
- MarkdownV2 formatting
- Code block syntax highlighting
- Typing indicators
- User allowlist
Discord
- Slash commands
- Rich embeds
- Ephemeral messages for sensitive data
- Deferred responses for slow operations
- Guild-specific command sync
Slack
- Socket Mode (no public webhooks needed)
- Block Kit messages
- Interactive buttons
- Slash command handling
Handlers
Use handlers directly in your own bot:
from cmdop_bots.handlers import ShellHandler, AgentHandler, FilesHandler
# Create handlers
shell = ShellHandler(cmdop_api_key="cmd_xxx", machine="my-server")
agent = AgentHandler(cmdop_api_key="cmd_xxx")
files = FilesHandler(cmdop_api_key="cmd_xxx")
# Use in your handler
async def handle_command(command, send):
await shell.handle(command, send)
# Clean up
await shell.close()
await agent.close()
await files.close()
Permissions
Control who can use your bot:
from cmdop_bots import PermissionManager, PermissionLevel
pm = PermissionManager()
# Add admin (full access)
pm.add_admin("telegram:123456789")
# Grant execute permission
pm.grant("discord:987654321", machine="prod-server", level=PermissionLevel.EXECUTE)
# Use with bot
bot = TelegramBot(
token="...",
cmdop_api_key="...",
permissions=pm,
)
Architecture
+--------------+
| Telegram |
| Discord |------> CMDOP SDK ------> Your Servers
| Slack |
+--------------+
- Simple: Each bot is < 200 lines of code
- Reliable: Proper error handling, reconnection
- Secure: Permission system, user allowlists
Development
# Clone repository
git clone https://github.com/cmdop/cmdop-bot
cd cmdop-bot
# Install dev dependencies
pip install -e ".[dev,all]"
# Run tests
pytest
# Type check
mypy cmdop_bots
# Lint
ruff check cmdop_bots
Environment Variables
| Variable | Description | Required |
|---|---|---|
TELEGRAM_BOT_TOKEN |
Telegram bot token | For Telegram |
DISCORD_BOT_TOKEN |
Discord bot token | For Discord |
SLACK_BOT_TOKEN |
Slack bot token (xoxb-...) | For Slack |
SLACK_APP_TOKEN |
Slack app token (xapp-...) | For Slack |
CMDOP_API_KEY |
CMDOP API key (cmd_xxx) | Yes |
CMDOP_MACHINE |
Default target machine | No |
ALLOWED_USERS |
Comma-separated user IDs | No |
Examples
See the examples/ directory:
telegram_bot.py- Full Telegram bot examplediscord_bot.py- Full Discord bot exampleslack_app.py- Full Slack app examplemulti_channel.py- Multi-channel hub example
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cmdop_bot-0.1.2.tar.gz.
File metadata
- Download URL: cmdop_bot-0.1.2.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f07020b73a53dcc8f5ed61bff6b0e1a9b73f58dff83a37543924b610dfd83403
|
|
| MD5 |
6429a3e96ff5e3cbf500994c9e21dc2b
|
|
| BLAKE2b-256 |
fb5ed84b8a39c75acc34879e180913e48633fb28ccf8ca9427f3d2bfa076d353
|
File details
Details for the file cmdop_bot-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cmdop_bot-0.1.2-py3-none-any.whl
- Upload date:
- Size: 37.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae0d66396097062c8ee2ca1b6ae720981363aedd13e177d58ae50c32154eb422
|
|
| MD5 |
dcb0d89c8e87da8df7fc991872620002
|
|
| BLAKE2b-256 |
1c9760b6f992fbe3dbc84f6de86c1a1da611cd3e670b482e35641baa0627d5f8
|