summaryrefslogtreecommitdiffstats
path: root/bridge
diff options
context:
space:
mode:
Diffstat (limited to 'bridge')
-rw-r--r--bridge/gitter/gitter.go182
1 files changed, 0 insertions, 182 deletions
diff --git a/bridge/gitter/gitter.go b/bridge/gitter/gitter.go
deleted file mode 100644
index 486fe433..00000000
--- a/bridge/gitter/gitter.go
+++ /dev/null
@@ -1,182 +0,0 @@
-package bgitter
-
-import (
- "fmt"
- "strings"
-
- "github.com/42wim/go-gitter"
- "github.com/42wim/matterbridge/bridge"
- "github.com/42wim/matterbridge/bridge/config"
- "github.com/42wim/matterbridge/bridge/helper"
-)
-
-type Bgitter struct {
- c *gitter.Gitter
- User *gitter.User
- Users []gitter.User
- Rooms []gitter.Room
- *bridge.Config
-}
-
-func New(cfg *bridge.Config) bridge.Bridger {
- return &Bgitter{Config: cfg}
-}
-
-func (b *Bgitter) Connect() error {
- var err error
- b.Log.Info("Connecting")
- b.c = gitter.New(b.GetString("Token"))
- b.User, err = b.c.GetUser()
- if err != nil {
- return err
- }
- b.Rooms, err = b.c.GetRooms()
- if err != nil {
- return err
- }
- b.Log.Info("Connection succeeded")
- return nil
-}
-
-func (b *Bgitter) Disconnect() error {
- return nil
-
-}
-
-func (b *Bgitter) JoinChannel(channel config.ChannelInfo) error {
- roomID, err := b.c.GetRoomId(channel.Name)
- if err != nil {
- return fmt.Errorf("Could not find roomID for %v. Please create the room on gitter.im", channel.Name)
- }
- room, err := b.c.GetRoom(roomID)
- if err != nil {
- return err
- }
- b.Rooms = append(b.Rooms, *room)
- user, err := b.c.GetUser()
- if err != nil {
- return err
- }
- _, err = b.c.JoinRoom(roomID, user.ID)
- if err != nil {
- return err
- }
- users, _ := b.c.GetUsersInRoom(roomID)
- b.Users = append(b.Users, users...)
- stream := b.c.Stream(roomID)
- go b.c.Listen(stream)
-
- go func(stream *gitter.Stream, room string) {
- for event := range stream.Event {
- switch ev := event.Data.(type) {
- case *gitter.MessageReceived:
- // ignore message sent from ourselves
- if ev.Message.From.ID != b.User.ID {
- b.Log.Debugf("<= Sending message from %s on %s to gateway", ev.Message.From.Username, b.Account)
- rmsg := config.Message{Username: ev.Message.From.Username, Text: ev.Message.Text, Channel: room,
- Account: b.Account, Avatar: b.getAvatar(ev.Message.From.Username), UserID: ev.Message.From.ID,
- ID: ev.Message.ID}
- if strings.HasPrefix(ev.Message.Text, "@"+ev.Message.From.Username) {
- rmsg.Event = config.EventUserAction
- rmsg.Text = strings.Replace(rmsg.Text, "@"+ev.Message.From.Username+" ", "", -1)
- }
- b.Log.Debugf("<= Message is %#v", rmsg)
- b.Remote <- rmsg
- }
- case *gitter.GitterConnectionClosed:
- b.Log.Errorf("connection with gitter closed for room %s", room)
- }
- }
- }(stream, room.URI)
- return nil
-}
-
-func (b *Bgitter) Send(msg config.Message) (string, error) {
- b.Log.Debugf("=> Receiving %#v", msg)
- roomID := b.getRoomID(msg.Channel)
- if roomID == "" {
- b.Log.Errorf("Could not find roomID for %v", msg.Channel)
- return "", nil
- }
-
- // Delete message
- if msg.Event == config.EventMsgDelete {
- if msg.ID == "" {
- return "", nil
- }
- // gitter has no delete message api so we edit message to ""
- _, err := b.c.UpdateMessage(roomID, msg.ID, "")
- if err != nil {
- return "", err
- }
- return "", nil
- }
-
- // Upload a file (in gitter case send the upload URL because gitter has no native upload support)
- if msg.Extra != nil {
- for _, rmsg := range helper.HandleExtra(&msg, b.General) {
- b.c.SendMessage(roomID, rmsg.Username+rmsg.Text)
- }
- if len(msg.Extra["file"]) > 0 {
- return b.handleUploadFile(&msg, roomID)
- }
- }
-
- // Edit message
- if msg.ID != "" {
- b.Log.Debugf("updating message with id %s", msg.ID)
- _, err := b.c.UpdateMessage(roomID, msg.ID, msg.Username+msg.Text)
- if err != nil {
- return "", err
- }
- return "", nil
- }
-
- // Post normal message
- resp, err := b.c.SendMessage(roomID, msg.Username+msg.Text)
- if err != nil {
- return "", err
- }
- return resp.ID, nil
-}
-
-func (b *Bgitter) getRoomID(channel string) string {
- for _, v := range b.Rooms {
- if v.URI == channel {
- return v.ID
- }
- }
- return ""
-}
-
-func (b *Bgitter) getAvatar(user string) string {
- var avatar string
- if b.Users != nil {
- for _, u := range b.Users {
- if user == u.Username {
- return u.AvatarURLSmall
- }
- }
- }
- return avatar
-}
-
-func (b *Bgitter) handleUploadFile(msg *config.Message, roomID string) (string, error) {
- for _, f := range msg.Extra["file"] {
- fi := f.(config.FileInfo)
- if fi.Comment != "" {
- msg.Text += fi.Comment + ": "
- }
- if fi.URL != "" {
- msg.Text = fi.URL
- if fi.Comment != "" {
- msg.Text = fi.Comment + ": " + fi.URL
- }
- }
- _, err := b.c.SendMessage(roomID, msg.Username+msg.Text)
- if err != nil {
- return "", err
- }
- }
- return "", nil
-}