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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evoid_jitsi_maubot-0.2.1-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

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

Hashes for evoid_jitsi_maubot-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 629b2be504b37cdf835e60661d4ecc26b1797708cd73e2b93ade333d3e59dfc4
MD5 3d52072cffd6cb40dd2cca14bdac2cf3
BLAKE2b-256 e9caa9f86457f87c7c8e84e06f54f697636f2afd757274bcbcadb7dce61bd57b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page