code: func (s *Service) TriggerEventHandler(queryChat bool, bsonQuery map[string]interface{}, data interface{}) error {
  
  	if s.EventHandler == nil {
  		return fmt.Errorf("EventHandler missed for %s service", s.Name)
  	}
  
  	if bsonQuery == nil {
  		return nil
  	}
  
  	db := mongoSession.Clone().DB(mongo.Database)
  	defer db.Session.Close()
  
  	ctx := &Context{db: db, ServiceName: s.Name}
  	atLeastOneWasHandled := false
  
  	if queryChat {
  		chats, err := ctx.FindChats(bsonQuery)
  
  		if err != nil {
  			s.Log().WithError(err).Error("FindChats error")
  		}
  		for _, chat := range chats {
  			if chat.Deactivated || chat.BotWasKickedOrStopped() {
  				continue
  			}
  			ctx.Chat = chat.Chat
  			err := s.EventHandler(ctx, data)
  
  			if err != nil {
  				ctx.Log().WithError(err).Error("EventHandler returned error")
  			} else {
  				atLeastOneWasHandled = true
  			}
  		}
  	} else {
  		users, err := ctx.FindUsers(bsonQuery)
  
  		if err != nil {
  			s.Log().WithError(err).Error("findUsers error")
  		}
  
  		for _, user := range users {
  			ctx.User = user.User
  			ctx.User.ctx = ctx
  			ctx.Chat = Chat{ID: user.ID, ctx: ctx}
  			err := s.EventHandler(ctx, data)
  
  			if err != nil {
  				ctx.Log().WithError(err).Error("EventHandler returned error")
  			} else {
  				atLeastOneWasHandled = true
  			}
  		}
  	}
  
  	if !atLeastOneWasHandled {
  		return errors.New("No single chat was handled")
  	}
  	return nil
  }
docs: // TriggerEventHandler perform search query and trigger EventHandler in context of each chat/user