Skip to main content

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

Release files for evoid-maubot 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for evoid-maubot 0.2.1
File Interpreter ABI Platform
evoid_maubot-0.2.1-py3-none-any.whl Python 3 none any Details

Release files / evoid_maubot-0.2.1-py3-none-any.whl

Download URL evoid_maubot-0.2.1-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f50507979a5809fbe0ba06842aa58afc7fbb74a0029a22663af6a156224d19d
BLAKE2b-256 checksum
How to use checksums
509d561104cf0d05838dc51be6cf6594fab915f4876469c237a23e2cee6373f1
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

1.0.0

1 release file

This release

0.2.1 This release

1 release file

0.2.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page