Skip to content

Commit 72bd8eb

Browse files
committed
Add welcome message from new users and ping command /lelerax
1 parent e015eff commit 72bd8eb

File tree

1 file changed

+53
-41
lines changed

1 file changed

+53
-41
lines changed

troll_shield.go

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,20 @@ func findTrollHouse(bot *tgbotapi.BotAPI, userID int) (string, error) {
5050
return "", error
5151
}
5252

53-
// TODO: should only works on @commonlispbr on future
54-
// selectedEvent return true if is a desired event to be processed
55-
func selectedEvent(update *tgbotapi.Update) bool {
56-
return update.Message != nil && update.Message.NewChatMembers != nil
53+
// messageEvent: return true if is a message event
54+
func messageEvent(update *tgbotapi.Update) bool {
55+
return update.Message != nil
56+
}
57+
58+
// newChatMemberEvent: return true if a new member joined to chat
59+
func newChatMemberEvent(update *tgbotapi.Update) bool {
60+
return messageEvent(update) && update.Message.NewChatMembers != nil
61+
}
62+
63+
// fromChatEvent: return true if the message is from a specific chat
64+
func fromChatEvent(update *tgbotapi.Update, username string) bool {
65+
chat := update.Message.Chat
66+
return messageEvent(update) && chat != nil && (chat.UserName == username || chat.Title == username)
5767
}
5868

5969
func setupLogging() {
@@ -106,56 +116,58 @@ func main() {
106116

107117
bot.Debug = true
108118

109-
log.Printf("Authorized on account %s", bot.Self.UserName)
119+
log.Printf("Authorized on account @%s", bot.Self.UserName)
110120

111121
u := tgbotapi.NewUpdate(0)
112122
u.Timeout = 60
113123

114124
updates, err := bot.GetUpdatesChan(u)
115125

116126
for update := range updates {
117-
// Check if is join event
118-
if !selectedEvent(&update) { // ignore any non-Message Updates
119-
continue
120-
}
121-
122-
for _, member := range *update.Message.NewChatMembers {
123-
trollHouse, err := findTrollHouse(bot, member.ID)
124-
if err != nil {
125-
log.Printf("findTrollHouse betrayed us: %v", err)
126-
continue
127+
if messageEvent(&update) {
128+
if update.Message.Text == "/lelerax" {
129+
reply(bot, &update, "Estou vivo.")
127130
}
131+
}
128132

129-
if trollHouse != "" {
130-
chatMember := tgbotapi.ChatMemberConfig{
131-
ChatID: update.Message.Chat.ID,
132-
UserID: member.ID,
133+
if newChatMemberEvent(&update) {
134+
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)
133138
}
134-
resp, err := bot.KickChatMember(
135-
tgbotapi.KickChatMemberConfig{ChatMemberConfig: chatMember},
136-
)
137-
138-
if resp.Ok == false || err != nil {
139-
log.Printf(
140-
"Kicking %q did not work, error code %v: %v",
141-
member.FirstName, resp.ErrorCode, resp.Description,
142-
)
143-
} else {
144-
username := member.FirstName
145-
if member.UserName != "" {
146-
username = fmt.Sprintf("@%v", member.UserName)
139+
140+
if trollHouse != "" {
141+
chatMember := tgbotapi.ChatMemberConfig{
142+
ChatID: update.Message.Chat.ID,
143+
UserID: member.ID,
147144
}
148-
text := fmt.Sprintf(
149-
"%v foi banido porque é membro do grupo: %v. Adeus.",
150-
username, trollHouse,
145+
resp, err := bot.KickChatMember(
146+
tgbotapi.KickChatMemberConfig{ChatMemberConfig: chatMember},
151147
)
152148

153-
msg := tgbotapi.NewMessage(update.Message.Chat.ID, text)
154-
msg.ReplyToMessageID = update.Message.MessageID
155-
156-
_, err := bot.Send(msg)
157-
if err != nil {
158-
log.Printf("Send msg failed: %v", err)
149+
if resp.Ok == false || err != nil {
150+
log.Printf(
151+
"[!] Kicking %q did not work, error code %v: %v",
152+
member.FirstName, resp.ErrorCode, resp.Description,
153+
)
154+
} else {
155+
username := getUserName(member)
156+
text := fmt.Sprintf(
157+
"%v foi banido porque é membro do grupo: %v. Adeus.",
158+
username, trollHouse,
159+
)
160+
reply(bot, &update, text)
161+
}
162+
} else {
163+
if fromChatEvent(&update, "commonlispbr") && !member.IsBot {
164+
username := getUserName(member)
165+
text := fmt.Sprintf(
166+
`Olá %s! Seja bem-vindo ao grupo oficial de Common Lisp do Brasil.
167+
Leia as regras em: https://lisp.com.br/rules.html.`,
168+
username,
169+
)
170+
reply(bot, &update, text)
159171
}
160172
}
161173
}

0 commit comments

Comments
 (0)