forked from jshiffer/matterbridge
155 lines
2.6 KiB
Markdown
155 lines
2.6 KiB
Markdown
|
# gitter
|
||
|
Gitter API in Go
|
||
|
https://developer.gitter.im
|
||
|
|
||
|
#### Install
|
||
|
|
||
|
`go get github.com/sromku/go-gitter`
|
||
|
|
||
|
- [Initialize](#initialize)
|
||
|
- [Users](#users)
|
||
|
- [Rooms](#rooms)
|
||
|
- [Messages](#messages)
|
||
|
- [Stream](#stream)
|
||
|
- [Faye (Experimental)](#faye-experimental)
|
||
|
- [Debug](#debug)
|
||
|
- [App Engine](#app-engine)
|
||
|
|
||
|
##### Initialize
|
||
|
``` Go
|
||
|
api := gitter.New("YOUR_ACCESS_TOKEN")
|
||
|
```
|
||
|
|
||
|
##### Users
|
||
|
|
||
|
- Get current user
|
||
|
|
||
|
``` Go
|
||
|
user, err := api.GetUser()
|
||
|
```
|
||
|
|
||
|
##### Rooms
|
||
|
|
||
|
- Get all rooms
|
||
|
``` Go
|
||
|
rooms, err := api.GetRooms()
|
||
|
```
|
||
|
|
||
|
- Get room by id
|
||
|
``` Go
|
||
|
room, err := api.GetRoom("roomID")
|
||
|
```
|
||
|
|
||
|
- Get rooms of some user
|
||
|
``` Go
|
||
|
rooms, err := api.GetRooms("userID")
|
||
|
```
|
||
|
|
||
|
- Join room
|
||
|
``` Go
|
||
|
room, err := api.JoinRoom("roomID", "userID")
|
||
|
```
|
||
|
|
||
|
- Leave room
|
||
|
``` Go
|
||
|
room, err := api.LeaveRoom("roomID", "userID")
|
||
|
```
|
||
|
|
||
|
- Get room id
|
||
|
``` Go
|
||
|
id, err := api.GetRoomId("room/uri")
|
||
|
```
|
||
|
|
||
|
- Search gitter rooms
|
||
|
``` Go
|
||
|
rooms, err := api.SearchRooms("search/string")
|
||
|
```
|
||
|
##### Messages
|
||
|
|
||
|
- Get messages of room
|
||
|
``` Go
|
||
|
messages, err := api.GetMessages("roomID", nil)
|
||
|
```
|
||
|
|
||
|
- Get one message
|
||
|
``` Go
|
||
|
message, err := api.GetMessage("roomID", "messageID")
|
||
|
```
|
||
|
|
||
|
- Send message
|
||
|
``` Go
|
||
|
err := api.SendMessage("roomID", "free chat text")
|
||
|
```
|
||
|
|
||
|
##### Stream
|
||
|
|
||
|
Create stream to the room and start listening to incoming messages
|
||
|
|
||
|
``` Go
|
||
|
stream := api.Stream(room.Id)
|
||
|
go api.Listen(stream)
|
||
|
|
||
|
for {
|
||
|
event := <-stream.Event
|
||
|
switch ev := event.Data.(type) {
|
||
|
case *gitter.MessageReceived:
|
||
|
fmt.Println(ev.Message.From.Username + ": " + ev.Message.Text)
|
||
|
case *gitter.GitterConnectionClosed:
|
||
|
// connection was closed
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Close stream connection
|
||
|
|
||
|
``` Go
|
||
|
stream.Close()
|
||
|
```
|
||
|
|
||
|
##### Faye (Experimental)
|
||
|
|
||
|
``` Go
|
||
|
faye := api.Faye(room.ID)
|
||
|
go faye.Listen()
|
||
|
|
||
|
for {
|
||
|
event := <-faye.Event
|
||
|
switch ev := event.Data.(type) {
|
||
|
case *gitter.MessageReceived:
|
||
|
fmt.Println(ev.Message.From.Username + ": " + ev.Message.Text)
|
||
|
case *gitter.GitterConnectionClosed: //this one is never called in Faye
|
||
|
// connection was closed
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
##### Debug
|
||
|
|
||
|
You can print the internal errors by enabling debug to true
|
||
|
|
||
|
``` Go
|
||
|
api.SetDebug(true, nil)
|
||
|
```
|
||
|
|
||
|
You can also define your own `io.Writer` in case you want to persist the logs somewhere.
|
||
|
For example keeping the errors on file
|
||
|
|
||
|
``` Go
|
||
|
logFile, err := os.Create("gitter.log")
|
||
|
api.SetDebug(true, logFile)
|
||
|
```
|
||
|
|
||
|
##### App Engine
|
||
|
|
||
|
Initialize app engine client and continue as usual
|
||
|
|
||
|
``` Go
|
||
|
c := appengine.NewContext(r)
|
||
|
client := urlfetch.Client(c)
|
||
|
|
||
|
api := gitter.New("YOUR_ACCESS_TOKEN")
|
||
|
api.SetClient(client)
|
||
|
```
|
||
|
|
||
|
[Documentation](https://godoc.org/github.com/sromku/go-gitter)
|