Skip to content
/ dementia Public

Rust library for the Matrix client-server protocoll

Notifications You must be signed in to change notification settings

zgtm/dementia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dementia

Latest version Documentation License Maintenance

Small rust library for the Matrix protocol

Status

Right now, only the following are supported:

  • joining rooms
  • sending text messages and
  • receiving text messages

Support for room creation and receiving other kinds of messages are planned for the near time. Also, image upload is on my personal to-do list. :)

Usage

First, add this to your Cargo.toml:

[dependencies]
dementia = "*"

In order to connect to a Matrix homeserver and join a room, you need a user on that homeserver and an access token for that user.

    let server_url = "https://matrix.org"; // The Matrix homeserver
    let access_token = "DAx…3wo";          // The Matrix user access token

With that, you can create a Homeserver object

    let connection = Homeserver::new(server_url)
        .access_token(access_token)
        .connect();

or alternatively

    let connection = MatrixHomeserver::connect(server_url, access_token);

and use this object to join rooms:

    let mut room = connection.join("#bottest:https://matrix.org".to_owned());

(You need to join a room you want to interact with even if you are already joined. This is for the library to obtain the room id.)

You receive new messages with connection.get_new_messages() (which returns a Vector<String> of all messages since last called) and send messages with connection.send_message() (which takes a String).

Example

extern crate dementia;

use dementia::{Homeserver, Room};
use std::{thread, time};

fn main() {
    let server_url = "https://matrix.org"; // The Matrix homeserver
    let access_token = "DAx…3wo";          // The Matrix user access token

    let conn = Homeserver::new(server_url)
        .access_token(access_token)
        .connect();
    // The room must already exist
    let mut room = conn.join("#bottest:https://matrix.org".to_owned()); 
        
    let five_sec = time::Duration::new(5, 0);
    loop {
        for message in conn.get_new_messages() {
            if message == "hi" {
                conn.send_message("ahoi!".to_owned());
            }
        }
        thread::sleep(five_sec);
    }
}

If you don't have an access token (yet) but the server supports password authentication, you can let the library generate its own access token:

    let connection = Homeserver::new("https://matrix.org")
        .username("@example:matrix.org")
        .password("examplepassword")
        .login()
        .connect();

Subsequentlty, you can retrieve the access token for future connections using

    access_token = connection.get_access_token();

About

Rust library for the Matrix client-server protocoll

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages