Skip to content

Commit 2c092c2

Browse files
committed
Make findTrollHouses run concurrently and return multiple groups
1 parent 7aad9ec commit 2c092c2

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

troll_shield.go

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"io"
1010
logger "log"
1111
"os"
12+
"strings"
13+
"sync"
1214

1315
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
1416
)
@@ -31,23 +33,37 @@ var log = logger.New(os.Stderr, "", logger.LstdFlags)
3133

3234
// findTrollHouse return the troll house group name if is well-known
3335
// otherwise, returns a empty string
34-
func findTrollHouse(bot *tgbotapi.BotAPI, userID int) (string, error) {
35-
var error error
36+
func findTrollHouses(bot *tgbotapi.BotAPI, userID int) string {
37+
ch := make(chan string, len(trollGroups))
38+
var wait sync.WaitGroup
3639
for _, trollGroup := range trollGroups {
37-
c, err := bot.GetChatMember(tgbotapi.ChatConfigWithUser{
38-
SuperGroupUsername: trollGroup,
39-
UserID: userID,
40-
})
41-
if err != nil {
42-
error = err
43-
continue
44-
}
45-
if c.IsMember() || c.IsCreator() || c.IsAdministrator() {
46-
return trollGroup, nil
40+
wait.Add(1)
41+
go func(group string) {
42+
defer wait.Done()
43+
c, _ := bot.GetChatMember(tgbotapi.ChatConfigWithUser{
44+
SuperGroupUsername: group,
45+
UserID: userID,
46+
})
47+
if c.IsMember() || c.IsCreator() || c.IsAdministrator() {
48+
ch <- group
49+
} else {
50+
ch <- ""
51+
}
52+
}(trollGroup)
53+
54+
}
55+
go func() {
56+
wait.Wait()
57+
close(ch)
58+
}()
59+
var houses []string
60+
for house := range ch {
61+
if house != "" {
62+
houses = append(houses, house)
4763
}
4864
}
4965

50-
return "", error
66+
return strings.Join(houses, ", ")
5167
}
5268

5369
// messageEvent: return true if is a message event
@@ -132,12 +148,7 @@ func main() {
132148

133149
if newChatMemberEvent(&update) {
134150
for _, member := range *update.Message.NewChatMembers {
135-
trollHouse, err := findTrollHouse(bot, member.ID)
136-
if err != nil {
137-
log.Printf("[!] findTrollHouse returned a error: %v", err)
138-
}
139-
140-
if trollHouse != "" {
151+
if trollHouse := findTrollHouses(bot, member.ID); trollHouse != "" {
141152
chatMember := tgbotapi.ChatMemberConfig{
142153
ChatID: update.Message.Chat.ID,
143154
UserID: member.ID,

0 commit comments

Comments
 (0)