diff options
| author | Mistivia <i@mistivia.com> | 2025-11-02 15:27:18 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-11-02 15:27:18 +0800 |
| commit | e9c24f4af7ed56760f6db7941827d09f6db9020b (patch) | |
| tree | 62128c43b883ce5e3148113350978755779bb5de /teleirc/matterbridge/bridge/steam/steam.go | |
| parent | 58d5e7cfda4781d8a57ec52aefd02983835c301a (diff) | |
add matterbridge
Diffstat (limited to 'teleirc/matterbridge/bridge/steam/steam.go')
| -rw-r--r-- | teleirc/matterbridge/bridge/steam/steam.go | 95 |
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" +} |
