summaryrefslogtreecommitdiff
path: root/teleirc/matterbridge/bridge/steam/steam.go
diff options
context:
space:
mode:
Diffstat (limited to 'teleirc/matterbridge/bridge/steam/steam.go')
-rw-r--r--teleirc/matterbridge/bridge/steam/steam.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/teleirc/matterbridge/bridge/steam/steam.go b/teleirc/matterbridge/bridge/steam/steam.go
new file mode 100644
index 0000000..5a577a2
--- /dev/null
+++ b/teleirc/matterbridge/bridge/steam/steam.go
@@ -0,0 +1,95 @@
+package bsteam
+
+import (
+ "fmt"
+ "sync"
+ "time"
+
+ "github.com/42wim/matterbridge/bridge"
+ "github.com/42wim/matterbridge/bridge/config"
+ "github.com/42wim/matterbridge/bridge/helper"
+ "github.com/Philipp15b/go-steam"
+ "github.com/Philipp15b/go-steam/protocol/steamlang"
+ "github.com/Philipp15b/go-steam/steamid"
+)
+
+type Bsteam struct {
+ c *steam.Client
+ connected chan struct{}
+ userMap map[steamid.SteamId]string
+ sync.RWMutex
+ *bridge.Config
+}
+
+func New(cfg *bridge.Config) bridge.Bridger {
+ b := &Bsteam{Config: cfg}
+ b.userMap = make(map[steamid.SteamId]string)
+ b.connected = make(chan struct{})
+ return b
+}
+
+func (b *Bsteam) Connect() error {
+ b.Log.Info("Connecting")
+ b.c = steam.NewClient()
+ go b.handleEvents()
+ go b.c.Connect()
+ select {
+ case <-b.connected:
+ b.Log.Info("Connection succeeded")
+ case <-time.After(time.Second * 30):
+ return fmt.Errorf("connection timed out")
+ }
+ return nil
+}
+
+func (b *Bsteam) Disconnect() error {
+ b.c.Disconnect()
+ return nil
+
+}
+
+func (b *Bsteam) JoinChannel(channel config.ChannelInfo) error {
+ id, err := steamid.NewId(channel.Name)
+ if err != nil {
+ return err
+ }
+ b.c.Social.JoinChat(id)
+ return nil
+}
+
+func (b *Bsteam) Send(msg config.Message) (string, error) {
+ // ignore delete messages
+ if msg.Event == config.EventMsgDelete {
+ return "", nil
+ }
+ id, err := steamid.NewId(msg.Channel)
+ if err != nil {
+ return "", err
+ }
+
+ // Handle files
+ if msg.Extra != nil {
+ for _, rmsg := range helper.HandleExtra(&msg, b.General) {
+ b.c.Social.SendMessage(id, steamlang.EChatEntryType_ChatMsg, rmsg.Username+rmsg.Text)
+ }
+ for i := range msg.Extra["file"] {
+ if err := b.handleFileInfo(&msg, msg.Extra["file"][i]); err != nil {
+ b.Log.Error(err)
+ }
+ b.c.Social.SendMessage(id, steamlang.EChatEntryType_ChatMsg, msg.Username+msg.Text)
+ }
+ return "", nil
+ }
+
+ b.c.Social.SendMessage(id, steamlang.EChatEntryType_ChatMsg, msg.Username+msg.Text)
+ return "", nil
+}
+
+func (b *Bsteam) getNick(id steamid.SteamId) string {
+ b.RLock()
+ defer b.RUnlock()
+ if name, ok := b.userMap[id]; ok {
+ return name
+ }
+ return "unknown"
+}