evoid-maubot
EVOID adapter for maubot — bridges Matrix events to Jitsi iframe commands via EVOID pipeline.
What It Does
Converts Matrix !jitsi commands into EVOID Intents, which map to Jitsi's 50+ iframe API commands. Full reference: https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe-commands/
Installation
# As EVOID plugin
evo plug install evoid-maubot
# As maubot plugin
cd packages/evoid-maubot
zip -9r evoid-maubot.mbp *
# Upload .mbp to maubot management interface
Commands
Room Management
| Command | Description | Mod |
|---|---|---|
!jitsi create [name] |
Create a new meeting | |
!jitsi join <room> |
Get join link | |
!jitsi hangup |
End the call | |
!jitsi end |
End conference for everyone | Yes |
Watch Party
| Command | Description | Mod |
|---|---|---|
!jitsi watch <url> [name] |
Create watch party (YouTube/video/audio) | |
!jitsi stopwatch |
Stop shared video |
Display
| Command | Description | Mod |
|---|---|---|
!jitsi name <name> |
Set display name | |
!jitsi email <email> |
Set email address | |
!jitsi subject <text> |
Set conference subject | Yes |
!jitsi localsubject <text> |
Set local subject |
Media Control
| Command | Description | Mod |
|---|---|---|
!jitsi mute |
Toggle audio mute | |
!jitsi video |
Toggle video mute | |
!jitsi screen |
Toggle screen sharing | |
| `!jitsi muteall [audio | video]` | Mute all participants |
| `!jitsi muteremote [audio | video]` | Mute specific participant |
| `!jitsi noise [true | false]` | Toggle noise suppression |
| `!jitsi quality <720 | 480 | 360 |
| `!jitsi audioonly [true | false]` | Audio only mode |
| `!jitsi camera [user | environment]` | Toggle camera facing |
!jitsi mirror |
Toggle camera mirror | |
!jitsi vbg |
Toggle virtual background dialog | |
| `!jitsi blur [slight-blur | blur | none]` |
| `!jitsi virtualbg [true | false] [img]` | Set virtual background |
Layout
| Command | Description | Mod |
|---|---|---|
!jitsi tile |
Toggle tile view | |
| `!jitsi settile [true | false]` | Set tile view |
!jitsi filmstrip |
Toggle filmstrip | |
!jitsi chat |
Toggle chat panel | |
!jitsi hand |
Toggle raise hand | |
!jitsi subtitles |
Toggle subtitles | |
| `!jitsi setsubtitles [true | false] [lang]` | Set subtitles |
| `!jitsi participants [true | false]` | Toggle participants pane |
!jitsi whiteboard |
Toggle whiteboard | |
| `!jitsi lobby [true | false]` | Toggle lobby mode |
Participants
| Command | Description | Mod |
|---|---|---|
!jitsi kick <id> |
Kick participant | Yes |
!jitsi mod <id> |
Grant moderator | Yes |
!jitsi pin [id] |
Pin participant | |
!jitsi volume <id> <0-1> |
Set volume | |
| `!jitsi largevideo [id] [camera | desktop]` | Set large video |
!jitsi names <id:name> [id:name ...] |
Overwrite names locally | |
!jitsi sendto <id> <roomId> |
Send to breakout room | Yes |
Moderation
| Command | Description | Mod |
|---|---|---|
| `!jitsi approveknock <true | false>` | Approve/reject lobby participant |
| `!jitsi moderation <true | false> <audio | video>` |
!jitsi askunmute <id> |
Ask to unmute | Yes |
!jitsi approvevideo <id> |
Approve participant for video | Yes |
| `!jitsi reject <audio | video>` | Reject participant |
Chat
| Command | Description | Mod |
|---|---|---|
!jitsi send <message> [id] |
Send chat message | |
!jitsi pm <id> |
Start private chat | |
!jitsi cancelpm |
Cancel private chat | |
!jitsi notify <title> [desc] |
Show notification | |
!jitsi hidenotify <uid> |
Hide notification | |
!jitsi tone <tones> [dur] [pause] |
Play touch tones |
Recording
| Command | Description | Mod |
|---|---|---|
| `!jitsi record <local | file | stream> [key]` |
| `!jitsi stoprecord <local | file | stream>` |
Breakout Rooms
| Command | Description | Mod |
|---|---|---|
!jitsi breakout [name] |
Create breakout room | Yes |
!jitsi autobreakout |
Auto-assign participants | Yes |
!jitsi closebreakout <roomId> |
Close breakout room | Yes |
!jitsi joinbreakout [roomId] |
Join a breakout room | |
!jitsi removebreakout <jid> |
Remove breakout room | Yes |
Misc
| Command | Description | Mod |
|---|---|---|
| `!jitsi followme [true | false] [recorderOnly]` | Toggle follow me |
!jitsi config <key=value> ... |
Overwrite config | Yes |
!jitsi bandwidth <bps> |
Set assumed bandwidth | |
!jitsi timer [duration] [elapsed] |
Set meeting timer | |
!jitsi resizefilm <width> |
Resize filmstrip width | |
!jitsi resizelarge <w> <h> |
Resize large video | |
| `!jitsi sendcamera [user | env]` | Request camera change |
!jitsi sendtext <id> <text> |
Send private text |
Configuration
# base-config.yaml
service_name: maubot-bot
command_prefix: jitsi
jitsi:
server_url: https://meet.example.com
muc_domain: conference.meet.example.com
admin_username: admin
admin_password: secret
admin_whitelist:
- "@admin:example.com"
storage:
db_path: jitsi-bot.db
enable_smart_routing: true
debug: false
Configuration Options
| Option | Default | Description |
|---|---|---|
service_name |
maubot-bot |
EVOID service name for intent routing |
command_prefix |
jitsi |
Matrix command prefix (without !) |
jitsi.server_url |
(empty) | Base URL of your Jitsi Meet instance |
jitsi.muc_domain |
(empty) | MUC conference domain |
jitsi.admin_username |
(empty) | Admin username for server-side ops |
jitsi.admin_password |
(empty) | Admin password for server-side ops |
admin_whitelist |
[] |
Matrix user IDs allowed for moderator commands |
storage.db_path |
jitsi-bot.db |
SQLite database file path |
storage.enable_smart_routing |
true |
Enable smart storage routing |
debug |
false |
Enable debug logging |
Storage
Optional persistence via evoid-sqlite and evoid-smart-storage:
pip install evoid-maubot[storage]
Data stored:
| Type | Namespace | Content |
|---|---|---|
meeting:* |
meetings | Room ID, name, creator, URL |
watch:* |
watch_parties | Video URL, content type, creator |
mod:* |
moderators | Moderator grants |
Storage is optional — bot works without it but won't persist data across restarts.
EVOID Integration
Each command maps to a Jitsi iframe API command. The flow:
!jitsi watch https://youtube.com/watch?v=abc
↓
Matrix Event → Adapter → Intent(name="jitsi:watch", level=STANDARD)
↓
Pipeline: validate → authorize
↓
Handler returns: {iframe_command: "startShareVideo", args: {url: "..."}}
↓
Jitsi executes command in user's browser
Moderator commands use level=CRITICAL for full pipeline (validate → authorize → audit → protect).
The plugin uses evoid.native.on to register intents with the EVOID message bus. Intents are published via evoid.publish and routed through the IOP pipeline.
Development
uv venv && uv pip install -e ".[dev]"
ruff check evoid_maubot/
ruff format evoid_maubot/
pytest tests/ -v
License
Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 evoid_jitsi_maubot-0.2.1-py3-none-any.whl.
File metadata
- Download URL: evoid_jitsi_maubot-0.2.1-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
629b2be504b37cdf835e60661d4ecc26b1797708cd73e2b93ade333d3e59dfc4
|
|
| MD5 |
3d52072cffd6cb40dd2cca14bdac2cf3
|
|
| BLAKE2b-256 |
e9caa9f86457f87c7c8e84e06f54f697636f2afd757274bcbcadb7dce61bd57b
|