forked from lug/matterbridge
		
	Compare commits
	
		
			16 Commits
		
	
	
		
			rocketchat
			...
			v1.12.3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 35736bbbfe | ||
|   | 85fa4df39d | ||
|   | 859b084814 | ||
|   | 315a038e00 | ||
|   | b3999b6e71 | ||
|   | 6bef998bb3 | ||
|   | 919a0309ad | ||
|   | 95bcca7335 | ||
|   | c78bd24c61 | ||
|   | d2cfd235ef | ||
|   | f8bf7f8d76 | ||
|   | 8432330cb2 | ||
|   | 02577a2b5c | ||
|   | 73501739d5 | ||
|   | ba674af5d4 | ||
|   | 3c85d937c6 | 
| @@ -76,9 +76,10 @@ func (b *Bdiscord) Connect() error { | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	serverName := strings.Replace(b.GetString("Server"), "ID:", "", -1) | ||||
| 	b.Nick = userinfo.Username | ||||
| 	for _, guild := range guilds { | ||||
| 		if guild.Name == b.GetString("Server") { | ||||
| 		if guild.Name == serverName || guild.ID == serverName { | ||||
| 			b.Channels, err = b.c.GuildChannels(guild.ID) | ||||
| 			b.guildID = guild.ID | ||||
| 			if err != nil { | ||||
|   | ||||
| @@ -172,7 +172,6 @@ func (b *Birc) JoinChannel(channel config.ChannelInfo) error { | ||||
| 	} else { | ||||
| 		b.i.Cmd.Join(channel.Name) | ||||
| 	} | ||||
| 	b.authDone = false | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -75,7 +75,7 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) { | ||||
| 			// When we join a channel we update the full list of users as | ||||
| 			// well as the information for the channel that we joined as this | ||||
| 			// should now tell that we are a member of it. | ||||
| 			b.populateUsers() | ||||
| 			b.populateUsers(false) | ||||
|  | ||||
| 			b.channelsMutex.Lock() | ||||
| 			b.channelsByID[ev.Channel.ID] = &ev.Channel | ||||
| @@ -83,13 +83,16 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) { | ||||
| 			b.channelsMutex.Unlock() | ||||
| 		case *slack.ConnectedEvent: | ||||
| 			b.si = ev.Info | ||||
| 			b.populateChannels() | ||||
| 			b.populateUsers() | ||||
| 			b.populateChannels(true) | ||||
| 			b.populateUsers(true) | ||||
| 		case *slack.InvalidAuthEvent: | ||||
| 			b.Log.Fatalf("Invalid Token %#v", ev) | ||||
| 		case *slack.ConnectionErrorEvent: | ||||
| 			b.Log.Errorf("Connection failed %#v %#v", ev.Error(), ev.ErrorObj) | ||||
| 		case *slack.MemberJoinedChannelEvent: | ||||
| 			b.populateUser(ev.User) | ||||
| 		default: | ||||
| 			b.Log.Debugf("Unhandled incoming event: %T", ev) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -193,7 +196,7 @@ func (b *Bslack) handleMessageEvent(ev *slack.MessageEvent) (*config.Message, er | ||||
| func (b *Bslack) handleStatusEvent(ev *slack.MessageEvent, rmsg *config.Message) bool { | ||||
| 	switch ev.SubType { | ||||
| 	case sChannelJoined, sMemberJoined: | ||||
| 		b.populateUsers() | ||||
| 		b.populateUsers(false) | ||||
| 		// There's no further processing needed on channel events | ||||
| 		// so we return 'true'. | ||||
| 		return true | ||||
| @@ -202,6 +205,13 @@ func (b *Bslack) handleStatusEvent(ev *slack.MessageEvent, rmsg *config.Message) | ||||
| 		rmsg.Event = config.EventJoinLeave | ||||
| 	case sChannelTopic, sChannelPurpose: | ||||
| 		rmsg.Event = config.EventTopicChange | ||||
| 	case sMessageChanged: | ||||
| 		rmsg.Text = ev.SubMessage.Text | ||||
| 		// handle deleted thread starting messages | ||||
| 		if ev.SubMessage.Text == "This message was deleted." { | ||||
| 			rmsg.Event = config.EventMsgDelete | ||||
| 			return true | ||||
| 		} | ||||
| 	case sMessageDeleted: | ||||
| 		rmsg.Text = config.EventMsgDelete | ||||
| 		rmsg.Event = config.EventMsgDelete | ||||
|   | ||||
| @@ -65,15 +65,38 @@ func (b *Bslack) getChannelByID(ID string) (*slack.Channel, error) { | ||||
|  | ||||
| const minimumRefreshInterval = 10 * time.Second | ||||
|  | ||||
| func (b *Bslack) populateUsers() { | ||||
| func (b *Bslack) populateUser(userID string) { | ||||
| 	b.usersMutex.RLock() | ||||
| 	_, exists := b.users[userID] | ||||
| 	b.usersMutex.RUnlock() | ||||
| 	if exists { | ||||
| 		// already in cache | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	user, err := b.sc.GetUserInfo(userID) | ||||
| 	if err != nil { | ||||
| 		b.Log.Debugf("GetUserInfo failed for %v: %v", userID, err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	b.usersMutex.Lock() | ||||
| 	b.users[userID] = user | ||||
| 	b.usersMutex.Unlock() | ||||
| } | ||||
|  | ||||
| func (b *Bslack) populateUsers(wait bool) { | ||||
| 	b.refreshMutex.Lock() | ||||
| 	if time.Now().Before(b.earliestUserRefresh) || b.refreshInProgress { | ||||
| 	if !wait && (time.Now().Before(b.earliestUserRefresh) || b.refreshInProgress) { | ||||
| 		b.Log.Debugf("Not refreshing user list as it was done less than %v ago.", | ||||
| 			minimumRefreshInterval) | ||||
| 		b.refreshMutex.Unlock() | ||||
|  | ||||
| 		return | ||||
| 	} | ||||
| 	for b.refreshInProgress { | ||||
| 		time.Sleep(time.Second) | ||||
| 	} | ||||
| 	b.refreshInProgress = true | ||||
| 	b.refreshMutex.Unlock() | ||||
|  | ||||
| @@ -109,14 +132,17 @@ func (b *Bslack) populateUsers() { | ||||
| 	b.refreshInProgress = false | ||||
| } | ||||
|  | ||||
| func (b *Bslack) populateChannels() { | ||||
| func (b *Bslack) populateChannels(wait bool) { | ||||
| 	b.refreshMutex.Lock() | ||||
| 	if time.Now().Before(b.earliestChannelRefresh) || b.refreshInProgress { | ||||
| 	if !wait && (time.Now().Before(b.earliestChannelRefresh) || b.refreshInProgress) { | ||||
| 		b.Log.Debugf("Not refreshing channel list as it was done less than %v seconds ago.", | ||||
| 			minimumRefreshInterval) | ||||
| 		b.refreshMutex.Unlock() | ||||
| 		return | ||||
| 	} | ||||
| 	for b.refreshInProgress { | ||||
| 		time.Sleep(time.Second) | ||||
| 	} | ||||
| 	b.refreshInProgress = true | ||||
| 	b.refreshMutex.Unlock() | ||||
|  | ||||
| @@ -251,7 +277,7 @@ func (b *Bslack) populateMessageWithBotInfo(ev *slack.MessageEvent, rmsg *config | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if bot.Name != "" && bot.Name != "Slack API Tester" { | ||||
| 	if bot.Name != "" { | ||||
| 		rmsg.Username = bot.Name | ||||
| 		if ev.Username != "" { | ||||
| 			rmsg.Username = ev.Username | ||||
|   | ||||
| @@ -48,6 +48,7 @@ const ( | ||||
| 	sChannelLeave    = "channel_leave" | ||||
| 	sChannelJoined   = "channel_joined" | ||||
| 	sMemberJoined    = "member_joined_channel" | ||||
| 	sMessageChanged  = "message_changed" | ||||
| 	sMessageDeleted  = "message_deleted" | ||||
| 	sSlackAttachment = "slack_attachment" | ||||
| 	sPinnedItem      = "pinned_item" | ||||
| @@ -76,14 +77,9 @@ func New(cfg *bridge.Config) bridge.Bridger { | ||||
| 	// Print a deprecation warning for legacy non-bot tokens (#527). | ||||
| 	token := cfg.GetString(tokenConfig) | ||||
| 	if token != "" && !strings.HasPrefix(token, "xoxb") { | ||||
| 		cfg.Log.Error("Non-bot token detected. It is STRONGLY recommended to use a proper bot-token instead.") | ||||
| 		cfg.Log.Error("Legacy tokens may be deprecated by Slack at short notice. See the Matterbridge GitHub wiki for a migration guide.") | ||||
| 		cfg.Log.Error("See https://github.com/42wim/matterbridge/wiki/Slack-bot-setup") | ||||
| 		cfg.Log.Error("") | ||||
| 		cfg.Log.Error("To continue using a legacy token please move your configuration to a \"slack-legacy\" bridge instead.") | ||||
| 		cfg.Log.Error("See https://github.com/42wim/matterbridge/wiki/Section-Slack-(basic)#legacy-configuration)") | ||||
| 		cfg.Log.Error("Delaying start of bridge by 30 seconds. Future Matterbridge release will fail here unless you use a \"slack-legacy\" bridge.") | ||||
| 		time.Sleep(30 * time.Second) | ||||
| 		cfg.Log.Warn("Non-bot token detected. It is STRONGLY recommended to use a proper bot-token instead.") | ||||
| 		cfg.Log.Warn("Legacy tokens may be deprecated by Slack at short notice. See the Matterbridge GitHub wiki for a migration guide.") | ||||
| 		cfg.Log.Warn("See https://github.com/42wim/matterbridge/wiki/Slack-bot-setup") | ||||
| 		return NewLegacy(cfg) | ||||
| 	} | ||||
| 	return newBridge(cfg) | ||||
| @@ -164,7 +160,7 @@ func (b *Bslack) JoinChannel(channel config.ChannelInfo) error { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	b.populateChannels() | ||||
| 	b.populateChannels(false) | ||||
|  | ||||
| 	channelInfo, err := b.getChannel(channel.Name) | ||||
| 	if err != nil { | ||||
| @@ -356,6 +352,10 @@ func (b *Bslack) editMessage(msg *config.Message, channelInfo *slack.Channel) (b | ||||
| } | ||||
|  | ||||
| func (b *Bslack) postMessage(msg *config.Message, messageParameters *slack.PostMessageParameters, channelInfo *slack.Channel) (string, error) { | ||||
| 	// don't post empty messages | ||||
| 	if msg.Text == "" { | ||||
| 		return "", nil | ||||
| 	} | ||||
| 	for { | ||||
| 		_, id, err := b.rtm.PostMessage(channelInfo.ID, msg.Text, *messageParameters) | ||||
| 		if err == nil { | ||||
| @@ -385,11 +385,16 @@ func (b *Bslack) uploadFile(msg *config.Message, channelID string) { | ||||
| 		ts := time.Now() | ||||
| 		b.Log.Debugf("Adding file %s to cache at %s with timestamp", fi.Name, ts.String()) | ||||
| 		b.cache.Add("filename"+fi.Name, ts) | ||||
| 		initialComment := fmt.Sprintf("File from %s", msg.Username) | ||||
| 		if fi.Comment != "" { | ||||
| 			initialComment += fmt.Sprintf("with comment: %s", fi.Comment) | ||||
| 		} | ||||
| 		res, err := b.sc.UploadFile(slack.FileUploadParameters{ | ||||
| 			Reader:          bytes.NewReader(*fi.Data), | ||||
| 			Filename:        fi.Name, | ||||
| 			Channels:        []string{channelID}, | ||||
| 			InitialComment: fi.Comment, | ||||
| 			InitialComment:  initialComment, | ||||
| 			ThreadTimestamp: msg.ParentID, | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			b.Log.Errorf("uploadfile %#v", err) | ||||
|   | ||||
							
								
								
									
										23
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,3 +1,26 @@ | ||||
| # v1.12.3 | ||||
| ## Bugfix | ||||
| * slack: Fix bot (legacy token) messages not being send. Closes #571 | ||||
| * slack: Populate user on channel join (slack) (#644) | ||||
| * slack: Add wait option for populateUsers/Channels (slack) Fixes #579 (#653) | ||||
|  | ||||
| # v1.12.2 | ||||
|  | ||||
| ## Bugfix | ||||
| * irc: Fix multiple channel join regression. Closes #639 | ||||
| * slack: Make slack-legacy change less restrictive (#626) | ||||
|  | ||||
| # v1.12.1 | ||||
|  | ||||
| ## Bugfix | ||||
| * discord: fix regression on server ID connection #619 #617 | ||||
| * discord: Limit discord username via webhook to 32 chars | ||||
| * slack: Make sure threaded files stay in thread (slack). Fixes #590 | ||||
| * slack: Do not post empty messages (slack). Fixes #574 | ||||
| * slack: Handle deleted/edited thread starting messages (slack). Fixes #600 (#605) | ||||
| * irc: Rework connection logic (irc) | ||||
| * irc: Fix Nickserv logic (irc) #602 | ||||
|  | ||||
| # v1.12.0 | ||||
|  | ||||
| ## Breaking changes | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	version = "1.12.1-dev" | ||||
| 	version = "1.12.3" | ||||
| 	githash string | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -1389,7 +1389,7 @@ enable=true | ||||
|  | ||||
|         #OPTIONAL - webhookurl only works for discord (it needs a different URL for each cahnnel) | ||||
|         [gateway.inout.options] | ||||
|         webhookurl=""https://discordapp.com/api/webhooks/123456789123456789/C9WPqExYWONPDZabcdef-def1434FGFjstasJX9pYht73y" | ||||
|         webhookurl="https://discordapp.com/api/webhooks/123456789123456789/C9WPqExYWONPDZabcdef-def1434FGFjstasJX9pYht73y" | ||||
|  | ||||
|     #API example | ||||
|     #[[gateway.inout]] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user