mirror of https://github.com/matrix-org/gomatrix
Add working example
This commit is contained in:
parent
1ed3413986
commit
8116089b86
|
@ -0,0 +1,126 @@
|
|||
package main
|
||||
|
||||
//import "github.com/kr/pretty"
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
"log"
|
||||
"github.com/matrix-org/gomatrix"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Login to a local homeserver and set the user ID and access token on success.
|
||||
func Login(server, username, password string) *gomatrix.Client {
|
||||
cli, _ := gomatrix.NewClient(server, "", "")
|
||||
resp, err := cli.Login(&gomatrix.ReqLogin{
|
||||
Type: "m.login.password",
|
||||
User: username,
|
||||
Password: password,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
cli.SetCredentials(resp.UserID, resp.AccessToken)
|
||||
return cli
|
||||
}
|
||||
|
||||
func ProcessResponse(resSync *gomatrix.RespSync) {
|
||||
for _,v := range resSync.Rooms.Join {
|
||||
//fmt.Printf("%v: %# v\n\n\n", k, pretty.Formatter(v.Timeline.Events))
|
||||
for _, e := range v.Timeline.Events {
|
||||
if e.Type == "m.room.message" {
|
||||
fmt.Printf("%v: %v\n", e.Sender, e.Content["body"])
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func ExtractRooms(resSync *gomatrix.RespSync) map[string]string{
|
||||
rooms := map[string]string{}
|
||||
for roomID,v := range resSync.Rooms.Join {
|
||||
//fmt.Printf("%v: %# v\n\n\n", k, pretty.Formatter(v.Timeline.Events))
|
||||
for _, e := range v.Timeline.Events {
|
||||
if e.Type == "m.room.name" {
|
||||
rooms[fmt.Sprint(e.Content["name"])] = roomID
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return rooms
|
||||
}
|
||||
|
||||
func main () {
|
||||
log.Print("Logging in...")
|
||||
username := os.Args[2]
|
||||
inviteUser := os.Args[4]
|
||||
roomname := "TestRoomFor" + username
|
||||
roomalias := roomname
|
||||
cli := Login(os.Args[1], username, os.Args[3])
|
||||
log.Println("Done!")
|
||||
cli.SetDisplayName(os.Args[2])
|
||||
log.Print("Creating room...")
|
||||
resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{
|
||||
RoomAliasName: roomalias,
|
||||
Name : roomname,
|
||||
Preset: "public_chat",
|
||||
})
|
||||
id := "!JHMwXpSMhcSnyAGDWB:matrix.org"
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
log.Println("Failed!")
|
||||
id = "#" + roomalias + ":matrix.org"
|
||||
} else {
|
||||
log.Println("Done!")
|
||||
fmt.Println("Room:", resp.RoomID)
|
||||
id = resp.RoomID
|
||||
log.Print("Joining room...")
|
||||
if _, err := cli.JoinRoom(id, "", nil); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Println("Done!")
|
||||
fmt.Println("Room:", id)
|
||||
}
|
||||
|
||||
log.Print("Syncing...")
|
||||
filter := `{"room":{"timeline":{"limit":50}}}`
|
||||
resSync, err := cli.SyncRequest(5, "", filter, false, "")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
ProcessResponse(resSync)
|
||||
|
||||
nextbatch := resSync.NextBatch
|
||||
|
||||
//get room id
|
||||
rooms := ExtractRooms(resSync)
|
||||
log.Println(rooms)
|
||||
id = rooms[roomname]
|
||||
|
||||
|
||||
log.Print("Sending message...")
|
||||
if _, err := cli.SendText(id, "Hello") ; err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Println("Done!")
|
||||
|
||||
log.Print("Inviting user...")
|
||||
if _, err := cli.InviteUser(id, &gomatrix.ReqInviteUser{UserID: inviteUser}) ; err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
log.Println("Done!")
|
||||
|
||||
|
||||
|
||||
for {
|
||||
resSync, err := cli.SyncRequest(5, nextbatch, filter, false, "")
|
||||
ProcessResponse(resSync)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
nextbatch = resSync.NextBatch
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
log.Println("Done!")
|
||||
}
|
Loading…
Reference in New Issue