patrix is a simple command line client for [Matrix](https://matrix.org) written in perl. It can create rooms, send text messages or files to rooms. I use it to send [Zabbix](https://www.zabbix.com) alerts to a Matrix room, a bit like [sendxmpp](https://github.com/lhost/sendxmpp) can do with XMPP. It requires the following perl modules * LWP::UserAgent * HTTP::Request * Config::Simple * File::HomeDir * File::Basename * File::MimeInfo * Path::Tiny * Getopt::Long * URI::Escape * JSON * Term::ReadKey For now it's very limited, and can only send text messages and files to a room. Here're the vailable options: * --user: specify the user you want to login as * --password: the password to auth against the HS * --server: the HS you want to connect to. Default is https://matrix.org * --access_token: can be used instead of --user and --password * --room: the room to which the message must be sent. Can be a room ID or a room alias * --message: the text message you want to send. If you send something on stdin, it's assumed to be the text to send and this option is ignored * --debug: if present, will be verbose * --conf: path to a conf file. Default conf file is ~/.patrixrc * --file: if action is send-file, specify the path of the file to send * --invite: a matrix ID (@user:server.domain.tld) to invite in a room. Can be specified several times. Valid for create-room and modify-room * --name: set the name of a room. Valid for create-room and modify-room * --topic: set the topic of a room. Valid for create-room and modify-room * --alias: set an alias for a room. Valid for create-room and modify-room * --join_rules: change joining rules. Can be either public (anyone can join the room) or invite (you must be invited to join the room) * --federation: Enable the federation when creating a room. Default is enabled. Can be turned of with --no-federation * --action: what to do. Valid actions are * send-msg (default): send the text message * send-message: an alias for send-msg * send-notice: send a notice. Very similar to send-msg but the client may display it differently. Eg Riot will not notify you for notices * send-file: send a binary file. --file must be set * create-room: create a new room * modify-room: change an existing room (add an alias, set name, topic, join_rules, invite) * get-access-token: just login and print the access token * get-room-list: prints the list of public rooms of this server All the available options can be set a the configuration file using a simple ini style format, eg ``` user=alert password=p@ssw0rd room=!BWdARvAgNQGgSjgtAG:matrix.domain.com ``` Options given on the command line take precedence over the config file Examples: ``` cat /var/log/boot.log | patrix --room='#bootlogs:matrix.domain.com' --action=send-notice ``` ``` patrix --action=send-file --file=/home/dani/archive.tgz --user=dani --password=secret --server=matrix.domain.com ``` ``` patrix --debug --message="Hello World" ``` ``` patrix --action=create-room --name="Human readable room name" --invite="@dani:matrix.example.com" ``` ``` patrix --action=modify-room --join_rules=public --topic='New topic' --room='!uXfknaWNcAnvthnIms:matrix.example.com' --invite='@admin:matrix.example.com' ```