mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-06-27 13:29:25 +00:00
Add ability to show when user is typing across Slack bridges (#559)
This commit is contained in:
@ -23,7 +23,9 @@ func (b *Bslack) handleSlack() {
|
||||
time.Sleep(time.Second)
|
||||
b.Log.Debug("Start listening for Slack messages")
|
||||
for message := range messages {
|
||||
b.Log.Debugf("<= Sending message from %s on %s to gateway", message.Username, b.Account)
|
||||
if message.Event != config.EVENT_USER_TYPING {
|
||||
b.Log.Debugf("<= Sending message from %s on %s to gateway", message.Username, b.Account)
|
||||
}
|
||||
|
||||
// cleanup the message
|
||||
message.Text = b.replaceMention(message.Text)
|
||||
@ -46,6 +48,14 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) {
|
||||
b.Log.Debugf("== Receiving event %#v", msg.Data)
|
||||
}
|
||||
switch ev := msg.Data.(type) {
|
||||
case *slack.UserTypingEvent:
|
||||
rmsg, err := b.handleTypingEvent(ev)
|
||||
if err != nil {
|
||||
b.Log.Errorf("%#v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
messages <- rmsg
|
||||
case *slack.MessageEvent:
|
||||
if b.skipMessageEvent(ev) {
|
||||
b.Log.Debugf("Skipped message: %#v", ev)
|
||||
@ -225,6 +235,24 @@ func (b *Bslack) handleAttachments(ev *slack.MessageEvent, rmsg *config.Message)
|
||||
|
||||
var commentRE = regexp.MustCompile(`.*?commented: (.*)`)
|
||||
|
||||
func (b *Bslack) handleTypingEvent(ev *slack.UserTypingEvent) (*config.Message, error) {
|
||||
var err error
|
||||
// use our own func because rtm.GetChannelInfo doesn't work for private channels
|
||||
channelInfo, err := b.getChannelByID(ev.Channel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rmsg := config.Message{
|
||||
Channel: channelInfo.Name,
|
||||
Account: b.Account,
|
||||
Event: config.EVENT_USER_TYPING,
|
||||
}
|
||||
|
||||
return &rmsg, nil
|
||||
|
||||
}
|
||||
|
||||
// handleDownloadFile handles file download
|
||||
func (b *Bslack) handleDownloadFile(rmsg *config.Message, file *slack.File) error {
|
||||
if b.fileIsAvailable(file) {
|
||||
|
@ -187,7 +187,10 @@ func (b *Bslack) Reload(cfg *bridge.Config) (string, error) {
|
||||
}
|
||||
|
||||
func (b *Bslack) Send(msg config.Message) (string, error) {
|
||||
b.Log.Debugf("=> Receiving %#v", msg)
|
||||
// Too noisy to log like other events
|
||||
if msg.Event != config.EVENT_USER_TYPING {
|
||||
b.Log.Debugf("=> Receiving %#v", msg)
|
||||
}
|
||||
|
||||
// Make a action /me of the message
|
||||
if msg.Event == config.EVENT_USER_ACTION {
|
||||
@ -266,6 +269,12 @@ func (b *Bslack) sendRTM(msg config.Message) (string, error) {
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not send message: %v", err)
|
||||
}
|
||||
if msg.Event == config.EVENT_USER_TYPING {
|
||||
if b.GetBool("ShowUserTyping") {
|
||||
b.rtm.SendMessage(b.rtm.NewTypingMessage(channelInfo.ID))
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// Delete message
|
||||
if msg.Event == config.EVENT_MSG_DELETE {
|
||||
|
Reference in New Issue
Block a user