Added ability to show when user is typing across Slack bridges. [#516]

This commit is contained in:
Patrick Connolly
2018-11-06 23:52:40 +08:00
parent f2703979a4
commit 1a5081cc19
5 changed files with 56 additions and 2 deletions

View File

@@ -46,6 +46,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)
@@ -235,6 +243,27 @@ 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{
Username: b.getUsername(ev.User),
Channel: channelInfo.Name,
Account: b.Account,
Event: config.EVENT_USER_TYPING,
ID: "slack " + time.Now().String(),
Extra: map[string][]interface{}{},
}
return &rmsg, nil
}
// handleDownloadFile handles file download
func (b *Bslack) handleDownloadFile(rmsg *config.Message, file *slack.File) error {
if b.fileIsAvailable(file) {

View 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 {
@@ -262,6 +265,13 @@ func (b *Bslack) sendWebhook(msg config.Message) (string, error) {
}
func (b *Bslack) sendRTM(msg config.Message) (string, error) {
if msg.Event == config.EVENT_USER_TYPING {
if b.GetBool("ShowUserTyping") {
chanID := b.channelsByName[msg.Channel].ID
b.rtm.SendMessage(b.rtm.NewTypingMessage(chanID))
}
return "", nil
}
channelInfo, err := b.getChannel(msg.Channel)
if err != nil {
return "", fmt.Errorf("could not send message: %v", err)