@@ -20,6 +20,8 @@ type TrollShieldBot interface {
2020 GetChatMember (telegram.ChatConfigWithUser ) (telegram.ChatMember , error )
2121 KickChatMember (telegram.KickChatMemberConfig ) (telegram.APIResponse , error )
2222 Send (telegram.Chattable ) (telegram.Message , error )
23+ LeaveChat (telegram.ChatConfig ) (telegram.APIResponse , error )
24+ GetUpdatesChan (telegram.UpdateConfig ) (telegram.UpdatesChannel , error )
2325}
2426
2527// blacklist groups, member from that groups will be kicked automatically
@@ -68,7 +70,7 @@ func getUserName(user telegram.User) string {
6870 return username
6971}
7072
71- func getUpdates (bot * telegram. BotAPI ) telegram.UpdatesChannel {
73+ func getUpdates (bot TrollShieldBot ) telegram.UpdatesChannel {
7274 u := telegram .NewUpdate (0 )
7375 u .Timeout = 60
7476 updates , err := bot .GetUpdatesChan (u )
@@ -176,41 +178,92 @@ func setupLogging() {
176178 }
177179}
178180
179- func setupBot () * telegram.BotAPI {
180- token , exists := os .LookupEnv ("TELEGRAM_BOT_TOKEN" )
181+ func setupBot (envVar string ) ( * telegram.BotAPI , error ) {
182+ token , exists := os .LookupEnv (envVar )
181183 if ! exists {
182- log . Fatal ( "TELEGRAM_BOT_TOKEN env should be defined." )
184+ return nil , fmt . Errorf ( "%s env should be defined" , envVar )
183185 }
184186 bot , err := telegram .NewBotAPI (token )
185187
186188 if err != nil {
187- log . Panic ( err )
189+ return nil , fmt . Errorf ( "Setup %v failed with: %v" , envVar , err )
188190 }
189191
190192 bot .Debug = true
191193
192194 log .Printf ("Authorized on account @%s" , bot .Self .UserName )
193195
194- return bot
196+ return bot , nil
197+ }
198+
199+ func setupHiddenBot (bot * telegram.BotAPI ) * telegram.BotAPI {
200+ log .Println ("Setup the hidden bot" )
201+ botHidden , err := setupBot ("TELEGRAM_BOT_HIDDEN_TOKEN" )
202+ if err != nil {
203+ log .Printf ("Bot setup failed: %v. Fallback to main bot." , err )
204+ botHidden = bot
205+ }
206+
207+ return botHidden
208+
209+ }
210+
211+ func setupBots () (* telegram.BotAPI , * telegram.BotAPI , error ) {
212+ log .Println ("Setup the main bot" )
213+ bot , err := setupBot ("TELEGRAM_BOT_TOKEN" )
214+ if err != nil {
215+ return nil , nil , err
216+ }
217+
218+ return bot , setupHiddenBot (bot ), nil
219+ }
220+
221+ func leaveChat (bot TrollShieldBot , update * telegram.Update , trollGroup string ) {
222+ reply (bot , update , "Nesse grupo há trolls. Dou-me a liberdade de ir embora. Adeus." )
223+ r , err := bot .LeaveChat (telegram.ChatConfig {ChatID : update .Message .Chat .ID })
224+ if ! r .Ok || err != nil {
225+ log .Printf ("Bot tried to exit from %v, but failed with: %v" ,
226+ trollGroup , err ,
227+ )
228+ }
195229}
196230
197231func main () {
198232 setupLogging ()
199- bot := setupBot ()
233+ bot , botHidden , err := setupBots ()
234+ if err != nil {
235+ log .Fatal (err .Error ())
236+ }
237+
200238 for update := range getUpdates (bot ) {
201239 if messageEvent (& update ) {
202240 if update .Message .Text == "/lelerax" {
203241 reply (bot , & update , "Estou vivo." )
204242 }
243+
244+ // Exit automatically from group after the bot receive a message from it
245+ for _ , trollGroup := range trollGroups {
246+ if fromChatEvent (& update , strings .TrimLeft (trollGroup , "@" )) {
247+ leaveChat (bot , & update , trollGroup )
248+ }
249+ }
205250 }
206251
207252 if newChatMemberEvent (& update ) {
208253 for _ , member := range * update .Message .NewChatMembers {
209- if trollHouse := findTrollHouses (bot , member .ID ); trollHouse != "" {
254+ if trollHouse := findTrollHouses (botHidden , member .ID ); trollHouse != "" {
210255 kickTroll (bot , & update , member , trollHouse )
211256 } else if fromChatEvent (& update , "commonlispbr" ) && ! member .IsBot {
212257 welcomeMessage (bot , & update , member )
213258 }
259+
260+ // Exit automatically from groups when I'm joining it
261+ for _ , trollGroup := range trollGroups {
262+ if fromChatEvent (& update , strings .TrimLeft (trollGroup , "@" )) && member .UserName == bot .Self .UserName {
263+ leaveChat (bot , & update , trollGroup )
264+ }
265+ }
266+
214267 }
215268 }
216269 }
0 commit comments