diff --git a/example/example.go b/example/example.go new file mode 100644 index 0000000..bb7c897 --- /dev/null +++ b/example/example.go @@ -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!") +}