@@ -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
5969func 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